Установить свойство текста UITextField в prepareForSegue

У меня есть TextField в моем ViewController1. У меня есть push segue для моего ViewController2, у которого также есть textField. Мне нужно установить textField.text в моем ViewController2 равным тексту в текстовом поле в моем ViewController1. Вот код, который у меня есть:

- (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 не работает?

Ответ 1

Вы не можете установить текст UITextField (и любых других компонентов, таких как UILabel и UITextView), в процессе подготовки к segue, поскольку все компоненты представления недавно назначенного контроллера еще не инициализированы (в это время все они nil), они только будет отображаться viewController (и он будет загружен).

Вы должны создать свойство NSString в представленном viewController, а затем где-то внутри вашего другого контроллера представления, например viewDidLoad, установите текст текстового поля как это значение свойства.

Как это:

В 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;
}

Ответ 2

Проверьте и убедитесь, что " VCT.textField " не является нулем в этой точке. Я подозреваю, что вы найдете, что это нуль.

Вам либо нужно выставить его через " @property (strong) IBOutlet UITextField * textField " или вам нужно сохранить строку где-нибудь еще (например, свойство " NSString "?), @property (strong) IBOutlet UITextField * textField затем загружает текстовое поле, когда представление полностью загружено.