我在标签栏控制器中有2个视图控制器。我的第二个导航控制器想要设置徽章值。 应用程序启动时未加载此控制器,因此徽章不会显示。如果我转到该标签,徽章会正确更新。
此选项卡的视图控制器加载/重新加载/更新/等等...
时会运行此代码段[self.navigationController.tabBarItem setBadgeValue:[NSString stringWithFormat:@“%u”,[self.photos count]]];
执行此操作的正确方法是:使用自定义类覆盖Nav Controller并将徽章值放在该级别?似乎这就是我应该提供这些信息的地方,但我还没有找到明确的答案。
答案 0 :(得分:1)
当加载TabBarController时,所有包含初始viewcontrollers的都被初始化。但是,在您导航到相应的标签项之前,不会加载他们的视图。因此,您无法在任何视图加载方法(viewDidLoad
等)中执行此处的代码。但是,您可以通过覆盖其中一个初始化方法来执行代码。
如果使用故事板,取消归档viewController的过程会在NIB加载时触发此方法:
- (void) awakeFromNib
{
}
如果不使用Storyboard,则在加载NIB之前调用此初始化程序:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
在任何一种情况下,你都可以覆盖这些方法来执行一些代码......
- (void) awakeFromNib
[super awakeFromNib];
[self.navigationController.tabBarItem
setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.navigationController.tabBarItem
setBadgeValue:[NSString stringWithFormat:@"badgeValue"]]];
}
return self;
}
但是,您需要注意从哪里获取数据。此时self.photos
可能未被初始化。如果此数据来自用户默认,您应该能够阅读此处的数据并相应地设置徽章。