неброский уитаббаритем в уитаббарконтроллере - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть UITabBarController с 5 кнопками панели вкладок. На некоторых мероприятиях я хочу выделить все элементы вкладок летучей мыши.

Может кто-нибудь помочь, пожалуйста?

Спасибо,

Ankita

1 Ответ

0 голосов
/ 13 апреля 2011

Прежде всего, я хотел бы сказать, что отмена выбора всех 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.

...