Отключить действие - пользователь нажимает на элемент панели вкладок, чтобы перейти к корневому контроллеру представления - PullRequest
18 голосов
/ 16 ноября 2010

Я хочу отключить действие по умолчанию, когда пользователь касается элемента панели вкладок.

Например, у меня есть панель вкладок с Tab1, Tab2 и Tab3.В Tab1 пользователь может перейти от View1 к View3 (View1> View2> View3).Если пользователь находится в View3, и он нажимает на Tab1, приложение переводит пользователя в View1 (корневой контроллер представления).Я хочу отключить эту функцию.Я не хочу, чтобы нажатие на Tab1 выдвигало все контроллеры представления.Как я могу это сделать?

Редактировать:

Это поведение немного странное, но удобный способ в случае глубокой иерархии!

Выможет реализовать следующие методы UITabBarControllerDelegate для отключения этого общесистемного ярлыка:

#pragma mark -
#pragma mark UITabBarControllerDelegate

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
    UIViewController *tbSelectedController = tbc.selectedViewController;

    if ([tbSelectedController isEqual:vc]) {
        return NO;
    }

    return YES;
}

1 Ответ

21 голосов
/ 16 ноября 2010

если вы посмотрите на делегата UITabBarController, есть метод:

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

Если вы реализуете это в своем классе, вы можете проверить, является ли UIViewController уже отображаемым, а затем вернуть NO, что предотвратит это.

У меня была такая же проблема с объектом ABPeoplePicker, встроенным в UITabBarController, в котором повторное нажатие на вкладку «Контакты», которое уже отображалось, заставило бы элемент управления ABPeoplePicker отобразить «Группы»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...