Кнопка возврата контроллера uinavigation перезагружает текущий загруженный экран - PullRequest
0 голосов
/ 23 июля 2011

У меня странная ошибка в моем коде во время работы над приложением для iphone. Я создаю контроллер навигации и помещаю его в свой контроллер панели вкладок, а затем, когда я перехожу с начального экрана на дополнительный, кнопка «Назад» на дополнительном экране указывает на себя. поэтому при нажатии кнопки назад она просто перезагружается, а затем при следующем нажатии возвращается к первому экрану.

UINavigationController *nav1 = [[UINavigationController alloc] init];

// create the initial views for each nav controller
SearchViewController *searchView = [[SearchViewController alloc] init];
searchView.title = @"Search";


//place all the viewcontrollers on the nav controllers ready to view
[nav1 pushViewController: searchView  animated:NO];


//create tab bar out of above nav controllers

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Search" image:[UIImage imageNamed:@"search.png"] tag:0];
nav1.tabBarItem = item;

UITabBarController *tbc = [[UITabBarController alloc] init];
        tbc.viewControllers = [NSArray arrayWithObjects:nav1, nil];
    //    
[nav1 release];

код выше находится в appdelegate для начальной настройки контроллера nav + tab

SecondScreenViewController *sVC = [[SecondScreenViewController alloc] init];

sVC.title = @"Screen 2";
[self.navigationController pushViewController:sVC animated:YES];
[sVC release];

выше - это код в контроллере представления поиска, который загружает второй экран / viewcontroller в контроллер nav. Но кнопка «Назад» в верхней части экрана 2 содержит слово «экран 2», и когда я нажимаю его один раз, он сам перезагружается, а затем кнопка «Назад» говорит «поиск» (это название первого экрана). на этот раз нажатие возвращает его к первому экрану.

Я просто запутался, почему кнопка «Назад» отображает собственное название заголовка контроллеров представления и перезагружается. У меня на самом деле нет другого кода на этих экранах, это просто пустые экраны с метками, показывающими, какой экран есть, пока я учусь правильно его использовать

Ответы [ 2 ]

1 голос
/ 23 июля 2011

В Apple Docs для UINavigationController для назначенного инициализатора

- (id)initWithRootViewController:(UIViewController *)rootViewController

указано, что:

В каждом стеке навигации должен быть хотя бы одинпосмотреть контроллер, выступающий в роли root.

Я бы порекомендовал попытаться инициализировать ваш UINavigationController с помощью rootViewController.

0 голосов
/ 25 июля 2011

TiltedWindmill, я уже сталкивался с этой проблемой. В моем случае, в моей голове, я хотел сделать это:

(> = нажатие контроллера вида)

Начните с MapViewController> Сведения о привлекательности для щелкающего булавки на карте> MapViewController> Затем нажмите на другой DetailsViewController.

В моем MapViewController этот контроллер представления был зарегистрирован для уведомления. Теоретически, я думал, что я перемещался как эта Карта> Контроллер представления деталей> Карта> Контроллер представления деталей. Дело в том, что всякий раз, когда я касался булавки на карте, запускалось уведомление, и обе копии MapViewController, находящиеся в стеке навигации, отвечали на уведомление.

В результате он выдвинул две копии одного и того же DetailsViewController. Итак, настоящая навигация была такой:

Карта> Подробности Просмотр контроллера> Карта> Подробности Просмотр контроллера copy1 + DetailsViewController copy2

*> = Второй контроллер просмотра подробностей был помещен поверх предыдущего, но не виден глазу.

Когда я нажал кнопку «Назад», он щелкнул DetailsViewController copy2 и показал тот же контроллер представления (DetailsViewController copy1).

Я исправил это, сказав моему MapViewController отменить подписку на уведомление о событии viewDidDisappear.

Не уверен, что вы поняли это: P

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