在prepareForSegue中设置UITextField文本属性

时间:2013-08-08 22:12:32

标签: ios objective-c xcode uitextfield segue

我的ViewController1中有一个textField。我有一个push segue到我的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不起作用?

2 个答案:

答案 0 :(得分:22)

您无法在准备segue中设置UITextField(以及UILabelUITextView等任何其他组件)的文本,因为最近分配的控制器的所有视图组件都不是尚未初始化(此时,它们都是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;
}

答案 1 :(得分:0)

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

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