объект iPhone UITabbar дважды щелкает, выталкивает контроллеры

Оператор, перегружающийся для set встроенный:

>>> a = set([1,2,3,4])
>>> b = set([3,4,5,6])
>>> a | b # Union
{1, 2, 3, 4, 5, 6}
>>> a & b # Intersection
{3, 4}
>>> a < b # Subset
False
>>> a - b # Difference
{1, 2}
>>> a ^ b # Symmetric Difference
{1, 2, 5, 6}

[еще 114] деталь из стандартного справочного руководства по библиотеке: Типы Набора

6
задан Chris 23 June 2009 в 19:56
поделиться

4 ответа

Единственный способ, который я нашел до сих пор, - это создать подкласс UINavigationController и перезаписать метод popToRootViewControllerAnimated, чтобы return nil.

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

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
    return nil;
}
0
ответ дан 17 December 2019 в 02:32
поделиться

Я только что побежал в эту проблему сам и нашел способ сделать это. Сделайте делегат для вашего уITABBACTORCONTROLLER и реализуйте TabBarController: TaxSelectViewController: Чтобы предотвратить выбор того же контроллера:

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

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

1
ответ дан 17 December 2019 в 02:32
поделиться

Вам, вероятно, не следует предотвращать такое поведение. Это стандартное соглашение о пользовательском интерфейсе iPhone, например, касание строки состояния для прокрутки к верхней части прокрутки.

Если вы действительно хотите это сделать, вы должны реализовать метод делегата UITabBarController -tabBarController: shouldSelectViewController: , как упоминалось в mckeed. Однако, если у вас более пяти вкладок, selectedViewController может быть контроллером представления, который находится в разделе «Дополнительно», а vc будет [UITabBarController moreNavigationController] . Вот реализация, которая обрабатывает этот случай:

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
    UIViewController *selected = [tbc selectedViewController];
    if ([selected isEqual:vc]) {
        return NO;
    }

    if ([vc isEqual:[tbc moreNavigationController]] &&
        [[tbc viewControllers] indexOfObject:selected] > 3) {
        return NO;
    }

    return YES;
}
5
ответ дан 17 December 2019 в 02:32
поделиться

Я согласен с сохранением этого предполагаемого поведения, но в то же время становится интересно корректно раскручивать стек VC (например, при редактировании вложенной серии объектов Core Data). В моем случае это равносильно отмене каждого VC.

Таким образом, есть ли у меня какой-то способ узнать, что мы добираемся до корневого VC?Я думаю, что операция отмены/отката во время viewWillDisappear не сокращает его, потому что то же самое представление наверняка исчезнет и после сохранения. Мне нужно как-то транслировать «мы отменяем - выручаем!», когда я добираюсь до корневого VC в данной вкладке. Проверка грязного/ нового флага в качестве проверки безопасности в viewWillDisappear также не помогает, так как этот тест будет вызван дважды в случае законной отмены (то есть, если кнопка отмены действительно нажата).

0
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: