UINavigationController не выдает вид при нажатии кнопки назад, но анимирует панель навигации - PullRequest
5 голосов
/ 18 ноября 2011

Я создаю очень простой пример приложения, чтобы показать, как настройки будут работать с новым приложением, над которым я работаю. Процесс очень прост: создайте UINavigationController в IB, назначьте ему View Controller, который будет корневым контроллером представления, и вставьте новый контроллер представления в стек контроллера навигации при вызове didSelectRowAtIndexPath.

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

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

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section != 0)
    return;

NSLog(@"didSelectRowAtIndexPath\n");

PrefsListTableViewController *prefsListTableViewController = [[PrefsListTableViewController alloc] initWithNibName:@"PrefsListTableViewController" bundle:nil];

[self.navigationController pushViewController:prefsListTableViewController animated:YES];
[prefsListTableViewController release];
}

Чтобы проверить, выполняется ли вызов viewWillDisappear во втором представлении, я добавил это в свой PrefsListTableViewController:

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"ptvc viewWillDisappear");
}

Это никогда не получит удар.

Во-первых, у меня сложилось впечатление, что вам не нужно ничего кодировать для обработки кнопки «назад», поскольку UINavigationController должен автоматически выталкивать для вас стек, когда вы нажимаете кнопку «назад». Я могу показать, что у меня есть пример приложения, которое делает то, что я делаю, но пример только код. Код взят из кода поваренной книги Эрика Садуна для разработчиков iPhone, рецепт 11-11. Ее код здесь:

https://github.com/erica/iphone-3.0-cookbook-/tree/master/C11-Tables/11-Disclosure%20Chevrons

Если вы посмотрите на ее код, там нет файлов .xib, и все обрабатывается без необходимости вообще кодировать кнопку возврата. Контроллеры представления помещаются в код и выталкиваются, по-видимому, без кода. Я предпочитаю использовать файлы .xib, и все ДОЛЖНО работать так же, но это не так.

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

2011-11-18 11:14:36.355 TableViewTest[58011:207] didSelectRowAtIndexPath
2011-11-18 11:14:36.358 TableViewTest[58011:207] ptvc viewWillAppear (
"<TableViewController: 0x8923d40>",
"<PrefsListTableViewController: 0x8927a20>"
)
2011-11-18 11:14:36.717 TableViewTest[58011:207] ptvc viewDidAppear (
"<TableViewController: 0x8923d40>",
"<PrefsListTableViewController: 0x8927a20>"
)

Таким образом, вы можете видеть, что контроллеры представления помещены в правильном порядке.

Это приводит к одному вопросу: почему PrefsListTableViewController не появляется при нажатии кнопки «Назад»? Если кому-то нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 28 февраля 2013

Вы расширили класс UINavigationController?У меня была и была такая же проблема.Очевидно, согласно Apple Docs, вы не должны расширять этот класс ...

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