Где я могу загрузить представление, которое должно знать содержимое Ivar? - PullRequest
0 голосов
/ 31 мая 2011

Я использую UIScrollView, чтобы создать иллюзию разлинованной бумаги за моим UITextView (я должен использовать отдельный UIScrollView, чтобы иметь поля).Чтобы нарисовать бумагу с правильным количеством строк, мне нужно передать ей contentSize.height UITextView.

Вот что происходит в данный момент:

  1. пользователь выбирает заметку из таблицы в родительском контроллере представления.
  2. родительский контроллер представления устанавливает свойство textview.text, чтобы мой UITextView знал, какой текст отображать.

Если яустановите мой UIScrollView в viewWillAppear, он не будет работать, потому что textView.text еще не был установлен, поэтому textView.contentSize.height равен нулю.Но если я установлю его в viewDidAppear, хотя он работает, через мгновение после текста появляются строки.

Как правильно это сделать?

Ответы [ 3 ]

1 голос
/ 31 мая 2011

Вы должны инициализировать все ваши представления в -viewDidLoad ... Действительно, до того момента, как был вызван -viewDidLoad, ваше представление не было полностью загружено.

Если вам нужно передать данные междуконтроллеры, вы можете определить свойство в одном из ваших контроллеров и установить его значение.Другой контроллер будет читать это свойство при необходимости.

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

1 голос
/ 31 мая 2011

То, что вы хотите, - это простой NSString *noteText ивар на контроллере дочернего вида, сделайте его похожим на @property (nonatomic, copy) NSString *noteText и синтезируйте его. Тогда как gcamp предлагает сделать что-то вроде:

YourChildController *childVC = ...
child.noteText = @"your selected note text here";
[self.navigationController pushViewController:childVC animated:YES];
[childVC release];

Затем в YourChildController viewDidLoad:

myTextView.text = noteText;
[myTextView sizeToFit]; // not sure if you need to do this or not

// now you can setup your background scroll view as needed

Если это не сработает, попробуйте настроить вид прокрутки в viewWillAppear: метод.

1 голос
/ 31 мая 2011

Просто попробуйте установить свойство перед нажатием дочернего контроллера представления.

Я предполагаю, что ваш код похож на родительский контроллер представления:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController* childViewController = ...
    [self.navigationController pushViewController:childViewController animated:YES];
    childViewController.text = ...
    [childViewController release];
}

Возможно, просто попробуйте

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController* childViewController = ...
    childViewController.text = ...
    [self.navigationController pushViewController:childViewController animated:YES];
    [childViewController release];
}
...