2013-04-17 2 views
0

У меня есть UITabBarController, к которому я добавлять и удалять UIViews без какого-либо вопроса следующим образом:Отвергая последнюю вкладку ViewController

Добавление

FileTabViewController* newTab = [[FileTabViewController alloc] initWithNibName:@"File" bundle:nil]; 
NSMutableArray* array = [NSMutableArray arrayWithArray:bar.viewControllers]; 
[array addObject:newTab]; 
[bar setViewControllers:array animated:YES]; 
[bar setSelectedIndex:bar.viewControllers.count-1]; 

Удаление (в пределах FileTabViewConroller.m)

NSMutableArray* newArray = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 
[newArray removeObject:self]; 
[self.tabBarController setViewControllers:newArray animated:YES]; 

Этот код работает точно так, как я ожидал, но есть на номила, который я не могу объяснить. Когда приложение запускается, и массив контроллера представления пуст (nil), тогда есть (как и следовало ожидать) никаких представлений, отображаемых в контроллере представления вкладок. Когда я добавляю просмотры, вкладки увеличиваются правильно, но когда я удаляю последний (т.е. индекс 0 счетчика 1), тогда вид появляется, чтобы оставаться загруженным, кнопки и метки на последней вкладке остаются видимыми - кажется, нет способа удалить все обратно в состояние «nil», с которого запускается приложение, - несмотря на то, что на контроллере нет никаких вкладок.

Launch (как и следовало ожидать)

image

Открытие и закрытие вкладки (это где я запутаться) - вы видите вкладка исчезает, но вид остается открытым ...?

image

Спасибо заранее за любую информацию!

+0

Вы когда-либо устанавливали newArray в виде массива контрольных точек контроллера панели? – rdelmar

+0

Да, я просто не включал эту строку ... – SteveDolphin23

ответ

0

Я сделал небольшое тестовое приложение, и я вижу то же поведение, что и вы. Я не знаю, является ли это непреднамеренным последствием того, как контроллер панели вкладок удаляет контроллеры и представления, или Apple предназначалась для этого - ведь зачем вам нужен черный экран? Кажется, что что-то держит сильный указатель на этот последний контроллер представлений, потому что, если у меня есть кнопка, которая удаляет контроллер (и это последний), я могу по-прежнему щелкнуть эту кнопку и получить действие. В первый раз, когда я нажимаю на него, контроллер панели табуляции по-прежнему отображает этот контроллер как выбранный контроллер, но если я снова нажму, выбранный контроллер будет равен нулю, но мой контроллер просмотра все еще будет работать.

Решение, позволяющее избавиться от вида, легко, просто удалите представление из своего супервизора после удаления последнего контроллера из массива.

[self.view removeFromSuperview]; 

Однако это не избавляет от контроллера вида. Что-то все еще держит ссылку на него, и до сих пор я не узнал, что это делает.

+0

Интересно, не так ли? Вы правы, removeFromSuperview действительно обновляет представление до черного, спасибо. – SteveDolphin23

+0

Но чем больше я думаю об этом, возможно, вы правы, возможно, исходное представление не должно быть черным экраном вообще, и поэтому ни один из них не должен выглядеть после закрытия всех вкладок - это плохой интерфейс ...? – SteveDolphin23

+0

Ну, это не очень привлекательно. Сначала я задавался вопросом, почему вы хотели это сделать. Это все еще интересный вопрос. –

0

Я не тестировал эту гипотезу, но мне интересно, будет ли здесь играть `moreNavigationController. Проверьте его значение перед добавлением любых вкладок и снова после удаления последней вкладки. Также взгляните на имущество visibleViewController как moreNavigationController, так и UITabBarController.

+0

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

Смежные вопросы