我有一个类似的问题。当用户离开我的应用程序以更改“设置”中的配色方案时,需要更新导航栏、文本和颜色属性。我能够更新导航栏颜色,但导航栏文本颜色没有更新。我的解决方案:我没有使用“故事板”。在我的AppDelegate.h
我有:
@property (….) CustomViewController *viewController;
@property (….) UINavigationController *nav;
我没有@synthesize
在AppDelegate.m
。然后在AppDidFinishLaunchingWithOptions:
….
self.viewController = [[CustomViewController alloc ….initWithNib….
[self setNavControllerAttributes]; // My solution is in this method
self.window.rootViewController = self.nav;
….
完成大部分工作的方法是AppDelegate.m
- (void) setNavControllerAttributes
{
self.nav = nil;
self.nav = [[UINavigationController alloc…
// Set my attributes with dictionary options and such
self.window.rootViewController = self.nav;
}
我知道我什*nav
至在应用程序第一次运行时将其设置为,但它可以工作,并且它也将设置为用户离开并重新启动应用程序时。我唯一担心的是我正在重新分配to ,但我认为 ARC 会负责我的内存管理。
为了完成这项工作,我在重新启动时再次调用该方法nil
nil
rootViewController
window
applicationWillEnterForeground:
[self setNavControllerAttributes];
我相信你可以根据自己的需要进行调整。我想,唯一需要注意的是保存数据,因为当您设置*nav
为时nil
,您可能会取消分配子控制器并丢失数据。这适用于 iOS 6。如果我注意到 iOS 7 需要不同的方法,我会回来更新。如果有人有其他建议,我会采纳建议。我希望这有帮助
applicationWillEnterForeground:
你甚至可以做一些更好的事情来最小化内存和性能开销。目前这是我更新第一个视图控制器的方法
if (self.viewController.isViewLoaded) {
[self setNavControllerAttributes];
[self.viewController viewWillAppear:YES];
}
if (self.viewController.view.window) {
// Perform other action if code above doesn't work
}