UITabBarController的注意点

  • 使用UITabBarController和使用一般的控制器一样,比如可以设置

    self.window.rootViewController = tabBarController;
    
  • 使用addChildViewController方法可以给其添加子控制器。每个子控制器对应一个UITabBarButton,也就是在UITabBarController下面的选项。此时如果想要改变UITabBarButton的内容,比如想要设置title, image等内容,需要在其对应的子控制器里面通过修改tabBarItem的属性来设置内容。

    // JYViewController.m -> 是UITabBarController的子控制器
    - (void)viewDidLoad
    {
      [super viewDidLoad];
    
          self.tabBarItem.title = @"选项1";
          self.tabBarItem.badgeValue = @"1";
    }
    

    这一点和UINavigationController是类似的,在使用UINavigationController的时候,我们在当前显示的控制器(也就是栈顶的控制器)中通过修改navigationItem来设置导航栏中的内容。

    self.navigationItem.leftBarButtonItem = ...;
    

    也就是说,使用UINavigationController和UITabBarController的时候:

    • 在其对应的控制器里面修改导航栏和tabBar的内容。
    • 通过修改tabBarItemnavigationItem的属性来设置导航栏和tabBar的内容。其实tabBarItem和navigationItem属于模型(从NSObject继承,以...Item结尾的可以都推测为模型?),此时我们通过修改模型来修改view中显示的内容。
  • 当UINavigationController和UITabBarController同时使用的时候,如果让navigationController作为self.window.rootViewController,然后再让tabBarController成为navigationController的子控制器,这么做是合法的,但是会有一些问题。

    因为前面说过,navigationBar上显示的内容是通过在其当前显示的子控制器中修改的,但是此时navigationController直接显示的子控制器是tabBarController,所以当进入不同的界面的时候,我们希望navigationBar上的内容(比如title)改变,但是此时是做不到的,因为我们无法在UITabBarController中修改navigationBar的内容。

    所以一般来说我们会让tabBarController作为根控制器,如果其他自定义的子控制器需要navigationController,那么就让每个自定义的控制器对应的navigationController作为tabBarController的子控制器,然后让自定义的控制器作为navigationController的子类。这样就可以在自定义控制器中修改navigationController的navigationBar显示内容。

你可能感兴趣的:(UITabBarController的注意点)