Не удается изменить UILabel.text более одного раза при переключении в подробный вид - PullRequest
0 голосов
/ 07 августа 2009

У меня есть navController и tableViewController, настроенные так, что выбор строки таблицы приведет к подробному просмотру стека navController и отображению подробной информации о выбранной строке. В подробном представлении я использую одну UILabel для отображения информации и устанавливаю значение свойства текста метки в viewDidLoad контроллера подробного представления.

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

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

Может кто-нибудь объяснить мне, что здесь происходит?

Спасибо!

1 Ответ

1 голос
/ 07 августа 2009

-viewDidLoad вызывается только когда ... хорошо, когда загружено представление. То есть, когда он создается в памяти, это первый раз, когда вы создаете контроллер представления. Любые входные данные, основанные на настройках, должны выполняться вместо этого в -viewWillAppear:, который вызывается каждый раз перед тем, как вставить его в контроллер навигации.

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

- (void) tableView:(TableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *screen = [[MyNewViewController alloc] initWithData:[data objectAtIndex:indexPath.row]];
    [self.navigationController pushViewController:screen animated:YES];
    [screen release];
}

Основная идея, однако, заключается в том, что настройка представления на основе данных, которые могут изменяться каждый раз, когда вы видите представление, должна выполняться в -viewWillAppear:. Настроить представление дальше, чем вы можете в Интерфейсном Разработчике, изменить то, что не изменится, независимо от того, на какие данные вы смотрите, должно быть сделано в -viewDidLoad

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