1.组成
TabBarControllerView,CustomContent,TabBar
2.使用
该控制器通常情况作为NavigationController的根视图来使用,可以自定义一个Controller继承TabBarController,并实现UITabBarControllerDelegate。
在项目的使用过程由于想实现类似淘宝导航栏侧滑返回效果,在自定义的TabBarController中viewDidLoad采用了下面代码初始化每个tab的控制器。
WscNavigationController *homeNavController = [[WscNavigationController alloc] initWithRootViewController:self.homeController];
WscNavigationController *addressBookNavController = [[WscNavigationController alloc] initWithRootViewController:self.addressBookController];
WscNavigationController *discoveryNavController = [[WscNavigationController alloc] initWithRootViewController:self.discoveryController];
WscNavigationController *shoppingCartNavController = [[WscNavigationController alloc] initWithRootViewController:self.shoppingCartController];
WscNavigationController *myNavController = [[WscNavigationController alloc] initWithRootViewController:self.myController];
[self setViewControllers:@[homeNavController, addressBookNavController, discoveryNavController, shoppingCartNavController,myNavController]];
这段代码看上去没有什么问题,但在使用过程中,如果要实现类似淘宝的侧滑返回效果,首先实现这个效果需要隐藏系统navbar,并add自定义的navbar,但是引发了诸多问题。例如:使用模式向上弹出控制器,dimss控制器后,系统导航栏自动出现,导致页面同时出现两个导航栏。又如:按Home键,在返回app时也出现了同样问题。之后有通过了各种方法将系统bar隐藏并将frame设置为Zero,并控制系统bar在各种情况下的显示隐藏,非常繁琐。
在push其他页面的时候还用控制tabbar的显示和隐藏十分不便
所以比较好的方法是在TabBarController中初始化控制器时不要在包一层NavigationController,直接将ViewController加入TabBarControler中,就可以避免这种情况的出现,少了不必要的麻烦。
[self setViewControllers:@[self.homeController,self.addressBookController,self.discoveryController,self.shoppingCartController,self.myController]];
网友评论