2017-01-13 5 views
0

Я хочу, чтобы пользователи не могли перейти к определенным контроллерам представлений, доступным через кнопки панели вкладок, и попросить их войти в систему с предупреждением. Однако я могу отключить кнопки, единственный способ обнаружить нажатие кнопки на заблокированной кнопке панели вкладок (для запуска предупреждения), похоже, заключается в том, чтобы вставить кнопку в другое представление с помощью распознавателя жестов, который кажется сложным.ios/object-c: Обнаружить нажатие кнопки tabbarbutton

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

Есть ли способ обнаружить прессу и предварительно убрать segue на контроллер вида, чтобы я мог запустить предупреждение?

Я попытался использовать следующий метод в своем делете приложения и в viewdidload отдельных контроллеров представления (которые подписываются на протокол делегирования uitabbarcontroller), но он не запускается.

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController]; 
    NSLog(@"Tab index pressed = %lu", (unsigned long)indexOfTab); 
    //launch alert 
//prevent segue to view controller 
} 

ответ

0

метода вы должны реализовать в вашем UITabBarController является:

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

Если пользователь авторизован вам вернуть YES, если он не показывает предупреждение и вернуть NO. Вы можете проверить, какой элемент был нажат, сравнив viewController с тем, которое вы хотите, чтобы пользователь регистрировался.

Вам не нужно реализовывать этот метод в контроллере, который подписывается на протокол делегатов UITabBarController, но для его реализации в подклассе вашего UITabBarController.