gpt4 book ai didi

ios - 在未实例化的 View Controller 上设置角标(Badge)值的正确方法?

转载 作者:行者123 更新时间:2023-11-29 04:02:40 26 4
gpt4 key购买 nike

我在标签栏 Controller 中有 2 个 View Controller 。我的第二个导航 Controller 想要设置角标(Badge)值。应用程序启动时不会加载此 Controller ,因此不会显示角标(Badge)。如果我转到该选项卡,角标(Badge)就会正确更新。

此代码片段在选项卡的 View Controller 加载/重新加载/更新/等时运行...

[self.navigationController.tabBarItem setBadgeValue:[NSString stringWithFormat:@"%u",[self.photos count]]];

正确的方法是:使用自定义类覆盖导航 Controller 并将角标(Badge)值放入该级别?看来我应该把这些信息放在那里,但我还没有找到明确的答案。

最佳答案

当 TabBarController 加载时,它包含的所有初始 viewController 都被初始化。但在您导航到相应的选项卡项之前,它们的 View 不会加载。因此,此时您无法在任何 View 加载方法(viewDidLoad 等)中执行代码。但是,您可以通过重写其中一种初始化方法来执行代码。

如果使用 Storyboard,则在加载 NIB 时取消归档 viewController 的过程会触发此方法:

- (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 可能尚未初始化。如果此数据来自用户默认值,您应该能够阅读此处的数据并相应地设置您的角标(Badge)。

关于ios - 在未实例化的 View Controller 上设置角标(Badge)值的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com