Прежде всего, я хотел бы сказать, что отмена выбора всех tabbaritems - плохой пользовательский опыт.Скорее всего, он не будет принят в AppStore.
После того как я сказал это, я нашел ответ здесь .Вы можете принять этот ответ (если он работает !!!), но этому пользователю должен быть предоставлен реквизит.Он использовал трюк в наблюдении значения ключа и использовал следующий код:
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Create the view controller which will be displayed after application startup
mHomeViewController = [[HomeViewController alloc] initWithNibName:nil bundle:nil];
[tabBarController.view addSubview:mHomeViewController.view];
tabBarController.delegate = self;
[tabBarController addObserver:self forKeyPath:@"selectedViewController" options:NSKeyValueObservingOptionNew context:NULL];
// further initialization ...
}
// This method detects if user taps on one of the tabs and removes our "Home" view controller from the screen.
- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if (!mAllowSelectTab)
{
[mHomeViewController.view removeFromSuperview];
mAllowSelectTab = YES;
}
return YES;
}
// Here we detect if UITabBarController wants to select one of the tabs and set back to unselected.
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (!mAllowSelectTab)
{
if (object == tabBarController && [keyPath isEqualToString:@"selectedViewController"])
{
NSNumber *changeKind = [change objectForKey:NSKeyValueChangeKindKey];
if ([changeKind intValue] == NSKeyValueChangeSetting)
{
NSObject *newValue = [change objectForKey:NSKeyValueChangeNewKey];
if ([newValue class] != [NSNull class])
{
tabBarController.selectedViewController = nil;
}
}
}
}
}
Он добавил следующее примечание:
первый контроллер представления из панели вкладок все еще будет загружен (хотя и в течение очень короткого времени), поэтому его viewDidLoad и viewWillAppear будут вызываться после запуска.Возможно, вы захотите добавить некоторую логику, чтобы предотвратить некоторые инициализации, которые вы, вероятно, можете выполнять в этих функциях до «реального» отображения этого контроллера в результате нажатия пользователем (например, с использованием глобальных переменных или NSNotificationCenter).
РЕДАКТИРОВАТЬ: это для адаптации Apple-UITabbar.Вы также можете создать пользовательский UITabbar.