当 TabBarController 被加载时,它所包含的所有初始视图控制器都被初始化。但是在您导航到相应的选项卡项之前,不会加载他们的视图。因此,此时您无法在任何视图加载方法(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
可能未初始化。如果此数据来自 userdefaults,您应该能够在此处阅读这些数据并相应地设置您的徽章。