要直接回答您的问题,假设您正在编写故事板或 xib'ing,您只能将插座连接到与该视图控制器的“自定义类”中定义的相同类或子类的视图控制器。
但是,这非常重要,不要将连接与实例化混淆。假设您实际上确实连接了 viewController1.textField 和 viewController2.textField,这并不意味着当 viewController2 出现时 viewController2.textField 会神奇地包含 viewController1.textField 中的值。更新 viewController2.textField 也不会将该值反映回 viewController1.textField。您必须手动执行此操作,因为连接与 viewController 的单个给定实例相关。
假设首先显示 ViewController1,则双向通信如下:
ViewController1 -> ViewController2
如果你是故事板,你需要在prepareForSegue中将值从一个viewController传递到另一个,例如:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// NOTE: if your viewController is laid out with multiple segues,
// use [segue identifier] to discern which segue has been triggered
ViewController2 *vc = (ViewController2 *)[segue destinationViewController];
vc.textField = self.textField;
}
如果您是实例化而不是故事板(警告:此代码尚未经过测试):
ViewController2 *vc = [[ViewController2 alloc] init];
vc.textField = self.textField;
[self presentViewController: vc animated: YES];
ViewController2 -> ViewController1
如果您想将某些内容从 viewController2 传递回 viewController1,那么您将创建一个协议,将 viewController1 设置为 viewController2 的委托,然后根据需要回调以镜像该值。
ViewController1.h:
#import "ViewController2.h"
@interface ViewController1 : UIViewController<ViewController2Delegate>
ViewController1.m:
vc.delegate = self; // vc = pointer to viewController2
ViewController2.h:
@protocol ViewController2Delegate<NSObject>
@required
- (void)importantValueDidChange:(NSString *)value;
@end
@property (weak, nonatomic) id<ViewController2Delegate> delegate;
ViewController2.m:(当值需要更新时)
if([self.delegate respondsToSelector: @selector(@ importantValueDidChange:)]) {
[self.delegate importantValueDidChange: self.textField.text];
}