在prepareForSegue中设置UITextField文本属性

我在我的ViewController1中有一个textField。 我有一个push到我的ViewController2也有一个textField。 我需要将我的ViewController2中的textField.text设置为等于我的ViewController1中的textField中的文本。 这是我有的代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqual:@"ViewController2"]) { ViewController2 *VCT = [segue destinationViewController]; VCT.title = @"View Controller #2"; VCT.textField.text = self.textField.text; } } 

标题制定者工作得很好。 为什么textField无法正常工作?

因为最近分配的控制器的所有视图组件都没有被初始化(这时它们都是nil ),所以你不能在准备segue时设置UITextField的文本(以及其他任何组件,比如UILabelUITextView )当viewController被呈现时。

您必须在呈现的viewController中创build一个NSString属性,然后在另一个视图控制器(如viewDidLoad内的某个位置将textField的文本设置为此属性值。

喜欢这个:

在将显示另一个viewController的viewController中:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"ViewController2"]) { ViewController2 *vc2 = [segue destinationViewController]; vc2.myString = self.textField.text; } } 

在呈现的viewController里面:

 - (void)viewDidLoad { [super viewDidLoad]; (...) self.textField.text = self.myString; } 

检查并看看“ VCT.textField ”在这一点上是不是零。 我怀疑你会发现它是零。

你可能需要通过“ @property (strong) IBOutlet UITextField * textField ”来暴露它,或者你需要将string存储在其他地方(例如“ NSString ”属性?),然后在视图被完全加载时加载文本字段。