Проблемы iPhoneDev, UITabBarController SelectedIndex

Я пытаюсь программно переключить элемент панели вкладок. Следующий код работает нормально, но я не могу заставить его работать в определенных ситуациях:

self.tabBarController.selectedIndex = 0;

Вот проблема:

У меня есть контроллер панели вкладок с двумя классами UIViewController. На второй вкладке у меня есть приведенный выше код, помещенный в оператор if в методе viewWillAppear. Приведенный выше код сам по себе работает, но он работает только в том случае, если представление никогда не загружалось. Итак, на первой вкладке у меня есть кнопка. Когда эта кнопка нажата, я программно переключаюсь на вторую вкладку. В этот момент мой код работает, и я остаюсь на первой вкладке. Но переключение не работает после первого раза. Это также не сработает, если я выберу эту вторую вкладку до того, как нажму эту кнопку. Оператор IF, внутри которого находится мой код, срабатывает, но выбранная вкладка не меняется.

Любая помощь будет оценена по достоинству. Пожалуйста, не стесняйтесь обращаться за разъяснениями, если они вам нужны.

Спасибо!


Позвольте мне добавить больше информации:

(1) Это используется только в редких случаях. Первый экран — это экран поиска. После того, как вы нажмете поиск, вы автоматически попадете на вторую вкладку, если нет результатов, тогда вы предупреждены, и вы остаетесь там.

(2) Вторая вкладка содержит список либо всех элементов, если поиск для сужения не выполнялся, либо список суженных элементов. В любом случае, этот список всегда доступен. Поэтому, даже если я остановлю их на странице поиска, если они забудут и перейдут на другую вкладку, им сообщат, что элементов нет. На данный момент я хотел бы вернуть их на первую вкладку, только для удобства.

Это не НАСТОЛЬКО большое дело, я могу жить без этого, и это не та ужасная схема программирования, какой некоторые ее представляют. Я просто хотел добавить один элемент удобства для пользователя...


Спасибо тс! Я использовал следующий метод в своем UITabBarControllerDelegate:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

if(self.tabBarController.selectedIndex == 0){
    if([books count] == 0){

        [self alertNoResults];

        return(FALSE);
    }
}
return(TRUE);
}

Работал как шарм!


person IcyBlueRose    schedule 06.08.2010    source источник
comment
зачем переключаться на вкладку 0, когда появится вкладка 1? Похоже, вы возитесь с неправильными вещами в неправильном месте, в точке, где API не хочет, чтобы такие вещи происходили (другими словами: когда вы получаете представление сообщения, это не лучшее время, чтобы инициировать полностью разное действие). Разработайте более чистый подход.   -  person mvds    schedule 06.08.2010
comment
Он используется только в редких случаях, когда результаты поиска не возвращаются, я хочу автоматически вернуть пользователя на первый экран.   -  person IcyBlueRose    schedule 06.08.2010
comment
Вы должны проверить это, прежде чем отправлять их на второй экран. Теперь у вас есть какие-то действия, в то время как вы вообще ничего не должны делать.   -  person mvds    schedule 06.08.2010
comment
Проблема в том, что человек все еще может выбрать другую панель вкладок вручную. Так что да, я могу остановить их с помощью кнопки поиска, но как только они нажмут на вкладку с результатами поиска и ничего не найдут, у них появится предупреждение, и я хочу, чтобы он вернулся к первой вкладке, просто для удобства. ..   -  person IcyBlueRose    schedule 06.08.2010


Ответы (1)


Вы переключаете вкладки во время переключения вкладок. Доктор Хэм.

Попробуйте реализовать UITabBarDelegate - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController; вернуть NO, если нет результатов.

В качестве альтернативы выполните проверку -viewDidAppear: (скорее всего, это сработает). Если это не сработает, вы даже можете использовать PerformSelectorInBackground (но будьте осторожны — пользователь может по-прежнему нажимать на другие вкладки!)

person tc.    schedule 06.08.2010
comment
Разве представление не вызывалось только при первой загрузке представления? - person IcyBlueRose; 06.08.2010
comment
Спасибо, этот метод сработал отлично! И, кстати, мое приложение готово!! - person IcyBlueRose; 07.08.2010
comment
Я думаю, вы путаете viewDidLoad и viewDidAppear:. viewDidAppear: вызывается после viewWillAppear: и любой анимации/настройки и т. д. В частности, я подозреваю, что переключение вкладок еще не произошло в viewWillAppear:, поэтому повторная установка индекса вкладок вызовет проблемы. - person tc.; 09.08.2010
comment
Ах, ты читаешь мои мысли. Да, я путал viewDidLoad с viewDidAppear. Когда-нибудь эти вещи придут ко мне естественным образом (надеюсь). Сейчас я использую свое второе приложение, и оно стало в 1000 раз проще. Я думаю, что на самом деле изучаю этот язык и SDK, не благодаря вам и другим, кто помог мне на этом сайте. Спасибо! - person IcyBlueRose; 18.08.2010
comment
Я закончил тем, что переписал большую часть своего первого приложения после того, как узнал, как правильно делать вещи (например, просмотры прокрутки страниц). - person tc.; 18.08.2010