UINavigationController не полностью отображает представление, а только меняет панель инструментов навигации на панель инструментов следующего представления - PullRequest
0 голосов
/ 03 мая 2010

Итак, у меня есть приложение для iPhone, которое использует UINavigationController для настройки представлений. Когда приложение запускается в первый раз, оно представляет пользователю UITableViewController, и пользователь может выбрать элемент, и оно будет выдвигать другое представление. Теперь он настроен так, что мое приложение запоминает последний выбор пользователя, автоматически выбирает его и загружает правильный контроллер вида. Единственная проблема заключается в том, что я испытываю действительно странный сбой при автоматической загрузке следующего представления ..

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

Спасибо за помощь.

Код:

Я определяю, выдвигать ли контроллер представления в зависимости от того, может ли он подключиться к серверу. Я делаю это в фоновом потоке:

- (void)startingThread
{    
    [NSThread detachNewThreadSelector:@selector(loginThread:) toTarget:self withObject:communicator];
}

- (void)loginThread:(MowerCommunicator *)communicator
{
    //If it can connect, launch thread complete.
    [self performSelectorOnMainThread:@selector(loginThreadComplete:) withObject:communicator waitUntilDone:NO];
}

- (void)loginThreadComplete:(MowerCommunicator *)communicator
{
    //push view controller
}

Теперь я добавил операторы NSLog, чтобы отслеживать, действительно ли представление «показывает» и вызывается ли viewWillAppear и viewDidAppear. Я также проверяю методы делегата для контроллера навигации, и они также вызываются.

У меня есть представление, которое является начальным представлением при запуске, и оно читает с сервера, чтобы определить, что отображать в следующем представлении таблицы. Это толкается нормально, и когда таблица перемещается, я скрываю кнопку «Назад», чтобы пользователь не мог вернуться к первому виду, не закрыв приложение. Затем табличное представление просматривает переменную в NSUserDefaults, чтобы определить, существует ли сохраненный индекс, и затем отправляет следующий контроллер представления. Вот когда происходит сбой. Если я затем нажимаю кнопку «назад», чтобы «вернуться» к представлению таблицы (это на самом деле просто меняет панель инструментов навигации), а затем я выбираю элемент из представления таблицы, он корректно загружает следующее представление. Кроме того, я вызываю те же самые методы, когда пользователь нажимал элемент из табличного представления и когда приложение автоматически загружает представление.

1 Ответ

0 голосов
/ 03 мая 2010

Самое простое объяснение состоит в том, что вы дважды помещаете начальный контроллер tableview в стек контроллера навигации.

Если в качестве первого контроллера nav в наконечнике установлен начальный контроллер tableview, но затем вы помещаете тот же контроллер в стек при попытке автоматического отображения составных представлений, вы получите то, что вы описываете. Навигация начинается с контроллера из пера, а затем вы помещаете другой экземпляр поверх этого.

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

...