如何使用委托方法在两个视图控制器之间传递对象?
我使用的应用程序项目Xcode 4.2,然后我为每个视图添加两个文本字段: main view
和flipside 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]; }