Оператор, перегружающийся для 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] деталь из стандартного справочного руководства по библиотеке: Типы Набора
Единственный способ, который я нашел до сих пор, - это создать подкласс UINavigationController и перезаписать метод popToRootViewControllerAnimated, чтобы return nil.
Похоже, это метод, который UITabBar вызывает, когда вкладывается дважды. Я не знаю, правильный ли это путь ... Хотел бы получить отзывы по этой проблеме ...
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated {
return nil;
}
Я только что побежал в эту проблему сам и нашел способ сделать это. Сделайте делегат для вашего уITABBACTORCONTROLLER и реализуйте TabBarController: TaxSelectViewController:
Чтобы предотвратить выбор того же контроллера:
- (BOOL) tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
return tbc.selectedViewController != vc;
}
Вы также можете добавить более сложную логику, если вы хотите только предотвратить его в некоторых случаях.
Вам, вероятно, не следует предотвращать такое поведение. Это стандартное соглашение о пользовательском интерфейсе 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;
}
Я согласен с сохранением этого предполагаемого поведения, но в то же время становится интересно корректно раскручивать стек VC (например, при редактировании вложенной серии объектов Core Data). В моем случае это равносильно отмене каждого VC.
Таким образом, есть ли у меня какой-то способ узнать, что мы добираемся до корневого VC?Я думаю, что операция отмены/отката во время viewWillDisappear не сокращает его, потому что то же самое представление наверняка исчезнет и после сохранения. Мне нужно как-то транслировать «мы отменяем - выручаем!», когда я добираюсь до корневого VC в данной вкладке. Проверка грязного/ нового флага в качестве проверки безопасности в viewWillDisappear также не помогает, так как этот тест будет вызван дважды в случае законной отмены (то есть, если кнопка отмены действительно нажата).