将数据从视图传递到视图?

时间:2012-03-20 06:02:37

标签: iphone objective-c ios5

我的申请仅仅是为了学习更客观的目标。此应用程序基本上将用户带到模态视图,然后为用户提供单击选项(uibuttons)。当用户点击按钮时,模态视图被取消,我想从该按钮获取数据(无论是按钮,标签等的标题,无论哪种最容易使用)并将其存储为变量我的主要观点。我尝试使用在单独的.h文件中定义的extern NSString,但没有运气。我错过了什么?

5 个答案:

答案 0 :(得分:1)

使用授权。制定协议。

@protocol SelectValueDelegate <NSObject>
@optional
- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller;
- (void)selectionCanceled:(UIViewController *)controller;
@end

MainViewController.h

中实施
@interface MainViewController : UIViewController<SelectValueDelegate> {
    //.... 
}

.m文件如下所示:

- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller
{
    //here you have value.
    [controller dissmissModalViewControllerAnimated:YES];
}
- (void)selectionCanceled:(UIViewController *)controller
{
        [controller dissmissModalViewControllerAnimated:YES];
}

并在你ModalViewController中创建委托的属性,如下所示:

@interface ModalViewController : UIViewController
        id<SelectValueDelegate> delegate;
}
@property(assign)id delegate; // synthesize it also

现在单击按钮执行以下操作:

-(IBAction)buttonClicked:(id)sender
{
       [delegate selectedValue:@"Value" selectionViewController:self];
}

并且在MainViewController内以模态方式呈现时,请执行以下操作:

ModalViewController *screen = [[ModalViewController alloc] initWithBlahblah];
screen.delegate = self;
[self.navigationController presentModalViewControllerAnimated:YES];

答案 1 :(得分:0)

你必须在iOS中通过委托模式。

您可以使用委托方法将值传递回主视图。

关于协议的

Apple documentation

Example using Protocol

答案 2 :(得分:0)

您必须使用委托方法传递值,请参阅Apple文档

答案 3 :(得分:0)

您可以将数据存储在appDelegate中的对象中,该对象是应用程序的Delegate文件,

您可以在appDelegate中声明一个对象:

NSString *buttonName;

然后对该对象进行特性化和合成。

执行此操作后,将代码放入您打开的视图控制器中作为模态VIew:

appDelegate.buttonName = yourbutton.titleLabel.text;

现在即使在取消模态视图后,您也会将按钮的标题存储在appldelegate的对象中,您可以从应用程序的任何位置访问它。

答案 4 :(得分:0)

假设您有两个视图控制器说 A &amp;的

你的A.h

{
  NSString *strData;
  int cId;
}

@property (nonatomic, retain) NSString *strData;
@property (readwrite) int cId;

现在在你的A.m

@synthesize strData,cId;

你的B.h

@class A

{
   A *aObj;
}

现在在你的B.m

#import "A.h"

- (void) viewDidLoad
{
  aObj=[A alloc] init]; //alloc object of A
  [aObj setCId:10]; //set value for cId
  [aObj setStrData:@"Hello from B"]; //set value for strData
  //do what ever
  [aObj release]; //don't forget
}