如何使用委托方法在两个视图控制器之间传递对象?

我使用的应用程序项目Xcode 4.2,然后我为每个视图添加两个文本字段: main viewflipside view 。 现在我希望将flipside文本字段的值分配给mainview文本字段。

MainViewController.h

  #import "FlipsideViewController.h" @interface MainViewController : UIViewController <FlipsideViewControllerDelegate> { UITextField *nameField; } @property(nonatomic, retain) IBOutlet UITextField *nameField; - (IBAction)showInfo:(id)sender; @end 

FlipsideViewController.h

  @class FlipsideViewController; @protocol FlipsideViewControllerDelegate - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; @end @interface FlipsideViewController : UIViewController { UITextField *changeText; } @property (nonatomic, retain) IBOutlet UITextField *changeText; @property (assign, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate; - (IBAction)done:(id)sender; @end 

FlipsideViewController.m

  #import "FlipsideViewController.h" @implementation FlipsideViewController @synthesize delegate = _delegate; @synthesize changeText; - (IBAction)done:(id)sender { [self.delegate flipsideViewControllerDidFinish:self]; } 

当完成操作开始时,我想将changetext值分配给nameField文本。 我该怎么做呢?

MainViewController.m中 ,实现flipSideViewControllerDelegate方法如下:

  - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller { self.nameField.text=controller.changeText.text; } 

因此,当调用done:方法时,也会使用您的flipSideViewController对象作为参数调用此委托方法,通过它可以访问changeText

编辑回答问题的评论:

在你的协议FlipSideViewControllerDelegate中,添加这个方法:

  - (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath 

那么它与MainViewController.m中的其他委托方法实现类似,这就是协议的工作原理。 如果你的MainViewController符合协议,它可以实现该协议的方法。 默认情况下,协议中声明的所有方法都是可选的,但是您可以select指定方法是可选的还是需要使用的

 @optional //list of methods @required //list of methods 

请记住,如果您的方法在协议中被声明为必需,则任何符合该协议的类都必须执行该方法。 无论如何,在你的MainViewController.m中

 - (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath { int anInt=indexPath.row; self.nameField.text=[NSString stringWithFormat:@"%d",anInt]; }