我正在使用Xcode 4.2的Utility Application项目,然后我为每个视图添加了两个文本字段:main view
和flipside view
。
现在,我希望将flipside
文本字段的值分配给主视图文本字段。
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
文本。
我该怎么做?
答案 0 :(得分:2)
在 MainViewController.m 中,将flipSideViewControllerDelegate
方法实现为:
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
{
self.nameField.text=controller.changeText.text;
}
因此,当调用done:
方法时,也会使用flipSideViewController
对象作为参数调用此委托方法,通过该参数可以访问changeText
。
编辑回答评论中的问题:
在您的协议FlipSideViewControllerDelegate中,添加以下方法:
- (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath
然后它类似于 MainViewController.m 中的其他委托方法实现 ,这是协议的真正工作方式。如果您的MainViewController符合协议,它可以实现该协议的方法。默认情况下,协议中声明的所有方法都是可选的,但您可以选择使用
指定方法是可选的还是必需的@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];
}