在uitabbarcontroller中unhighlight uitabbaritem

时间:2011-04-13 10:34:32

标签: iphone uitabbarcontroller uitabbar tabbar

我有UITabBarController有5个tabbar按钮。在某些活动中,我想取消所有标签栏项目的高亮显示。

有人可以帮忙吗?

谢谢,

安基塔

1 个答案:

答案 0 :(得分:0)

首先,我想说取消选择所有tabbaritems是一种糟糕的用户体验。机会很高,不会被appstore接受。

在我说完之后,我找到了回复here。你可以接受这个答案(如果它有效!!!)但应该给那个用户道具。他在Key Value Observing中使用了一个技巧,并使用了以下代码:

- (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;                 
                }             
            }         
        }     
    } 
}

他补充说明:

  

来自tabbar的第一个视图控制器   仍将被加载(虽然是为了   很短的时间),所以它的viewDidLoad   和viewWillAppear将被调用   启动后。您可能想要添加   一些逻辑来防止一些   你可能会做的初始化   这些功能直到“真实”显示   作为用户的结果的那个控制器   点击(例如使用全局   变量或NSNotificationCenter)。

编辑:这是为了适应Apple-UITabbar。您还可以创建自定义UITabbar。