11

我的 ViewController1 中有一个 textField。我的 ViewController2 有一个 push segue,它也有一个 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;
    }
}

标题设置器工作得很好。为什么文本字段不起作用?

4

2 回答 2

22

您不能在准备 segue 中设置UITextField(以及任何其他组件,如UILabeland UITextView)的文本,因为最近分配的控制器的所有视图组件都尚未初始化(此时它们都是nil),它们只会在viewController 被呈现(并且它的视图被加载)。

您必须在呈现的 viewController 中创建一个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;
}
于 2013-08-08T22:18:40.110 回答
0

检查并查看“ VCT.textField”此时是否不为零。我怀疑你会发现它是零。

您要么需要通过“ @property (strong) IBOutlet UITextField * textField”公开它,要么需要将字符串存储在其他地方(例如“ NSString”属性?),然后在视图完全加载时加载文本字段。

于 2013-08-08T22:14:16.600 回答