Переключение на другой вид с помощью UITabBar - PullRequest
1 голос
/ 03 сентября 2010

Я только начал разработку с помощью iPhone SDK, и у меня возникла проблема с переходом на другую вкладку с помощью UITabBar.

Это мой текущий код, и он работает до сих пор:

myAppAppDelegate *appDel = (myAppAppDelegate *)[[UIApplication sharedApplication] delegate]
[appDel.tabBar setSelectedViewController:[appDel.tabBar.viewControllers objectAtIndex:5]];

Но если я перейду на вкладку «Больше» и переставлю элементы панели вкладок, индекс viewControllers тоже изменится. Есть ли возможность, как я мог решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2010

Прежде всего, если вы обнаружите, что набираете это:

(myAppAppDelegate *)[[UIApplication sharedApplication] delegate]

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

Лучшедизайн заключается в делегировании делегату приложения, а делегат приложения переключает вкладку для вас.Делегат приложения должен иметь ссылки на фактические контроллеры представления в панели вкладок (вы можете подключить их через IB, если нет), чтобы вы могли вызывать setSelectedViewController: с правильным объектом, а не индексировать в массив панели вкладок:

/* Somewhere in the app delegate */
- (void)selectFooBarController {
    [self.tabBar setSelectedViewController:self.fooBarController];
}

Теперь, если вы не хотите беспокоиться о делегировании, вы можете просто поместить метод в делегат приложения (как тот, что приведен выше), и ваш первоначальный код станет:потребуется добавить свойства IBOutlet к делегату приложения, который вы подключаете к fooBarController и т. д. в Интерфейсном Разработчике.Это позволит вам напрямую ссылаться на них, а не извлекать их из массива.

0 голосов
/ 03 сентября 2010

Самое простое средство, которое я могу обдумать, основано на том факте, что при первом запуске приложения, если вы не делаете что-то для сохранения переупорядочения, вы можете сохранить исходный список UIViewControllers:

initialOrdering = [[appDel.tabBar viewControllers] copy];

Где 'initialOrdering' - это NSArray *, который вы затем использовали бы вместо appDel.tabBar.viewControllers в опубликованном вами коде.

...