2013-04-19 1 views
0

Да, я знаю, что люди просили об этом некоторое время.Передача текста UILabel с одного монитора зрения на другой

Я ищу некоторую помощь о том, как передать данные из одного контроллера вида на другие, используя .. @ свойства

Вместо того, чтобы разместить код здесь, я отправил бесплатный образец код, который вы можете получить из открытой папки Dropbox.

Любая помощь приветствуется, но, пожалуйста, помните, что я ищу помощь, но я не разрабатываю раскадровку, поэтому я не могу использовать prepareForSeque.

URL: https://www.dropbox.com/sh/l7xagtqqprcjqr2/gplHMvM2-O

+0

Когда вы инициализируете viewController, представление этого viewController не инициализируется, значит, представление не загружается в память. Если вы не напишете какой-то код, например self.view.backgroundColor = [UIColor redColor], который вызывается viewDidload. – wyp

ответ

1

Хорошо, так, в SecondViewController, вы создали UserText UITextField - то, что происходит на самом деле является:

  1. SecondViewController *SecondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
  2. SecondView.UserText = TextField.text;
  3. SecondViewController viewDidLoad называется, UserText перезаписывается с помощью правильной ссылки через IBOutlet.

Это в значительной степени ошибка, которую люди продолжают делать; инициализируя viewcontroller, не является гарантией того, что viewDidLoad вызывается, когда вы этого хотите.

Таким образом, есть несколько способов сделать это,

  1. Установить свойство NSString в SecondViewController
  2. Передайте текст в метод initWithNibName SecondViewController как так:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil text:(NSString *) text

Вариант 2 требует свойства NSString. Вы не можете назначить текст UILabel, подключенному через IBOutlet, это потому, что viewDidLoad имеет значение , а не, как только вы инициализируете контроллер вида.

+0

"не является гарантией того, что viewDidLoad вызывается, когда вы хотите, чтобы он был." ... вы правы, но вызывается, когда приложение запускается и вызывая SecondView.userText = Textfield.text, который будет придерживаться курс приложения, что означает, что вам не нужно вызывать SecondView.UserText = TextField.text; каждый раз, когда вы вызываете действие или появляется представление ... –

+0

Но вы не можете вызвать его до того, как viewDidLoad вызывается в первый раз, и единственный раз, когда вызывается при вызове viewDidLoad, находится внутри него или viewWillAppear/методы viewDidAppear. Либо вы храните строку как свойство, либо сохраняете текст, это хранилище данных за пределами области parentViewController, где-то, где SecondViewController может получить к нему доступ. Кроме того, как он настроен в настоящий момент, похоже, что он будет течь, если вы будете использовать UserText = TextField (вы не можете назначить TextField.text для UserText, потому что один из них - NSString, а другой - UITextField. – user352891