iOS/Objective-C:编程修改UITabBarItem标题及返回原VC后恢复问题
解决UITabBarItem标题切换不回原始内容的问题
我之前也碰到过一模一样的情况,核心问题其实是没在起始视图控制器的生命周期方法里做标题还原操作。当你从第二个VC返回起始VC时,起始VC的viewWillAppear会被触发,这正是我们还原标题的最佳时机。
具体解决方案:
在起始视图控制器的
viewWillAppear中还原标题
直接在起始VC的这个方法里,把对应的tabBarItem标题改回原始内容:- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 替换成你的起始VC原始标题,比如@"Home" self.tabBarItem.title = @"Home"; }优化第二个VC的标题设置代码
你之前的代码可以更稳妥一点,直接操作当前VC的tabBarItem(因为当前VC本身就是tabBarController的子控制器,它对应的tabBarItem就是选中的那个),不用去获取selectedItem:- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.tabBarItem.title = @"VoiceMail"; }
为什么这样可行?
- 跳转到第二个VC时,它的
viewWillAppear触发,把标题改成VoiceMail; - 返回起始VC时,起始VC的
viewWillAppear触发,把标题还原回原始内容; - 用
self.tabBarItem代替tabBarController.tabBar.selectedItem更准确,避免切换其他tab时可能出现的误操作。
额外规范建议
如果想让逻辑更清晰,还可以在两个VC的viewDidLoad里先设置好各自的默认标题,确保初始化时就有正确显示:
// 起始VC的viewDidLoad - (void)viewDidLoad { [super viewDidLoad]; self.tabBarItem.title = @"Home"; } // 第二个VC的viewDidLoad - (void)viewDidLoad { [super viewDidLoad]; self.tabBarItem.title = @"VoiceMail"; }
这样不管用户怎么切换tab,每个VC出现时都会自动设置对应的标题,完全不会出现标题错乱的问题。
内容的提问来源于stack exchange,提问作者user6631314
相关产品推荐
相关产品推荐

