在UINavigationController中重新加载UIToolbar而不重新加载视图

时间:2013-07-23 18:11:02

标签: uinavigationcontroller refresh uitoolbar

我正在使用UINavigationController并使用我最顶层的UIViewController的方法setToolbarItems设置工具栏项。这在用户第一次进入屏幕或用户重新访问屏幕时工作正常。但是我也有一个与服务器通信的后台线程。服务器发送消息以从工具栏中删除某些按钮或由于应用程序逻辑而更改图标。那时如果我在主线程上调用当前UIViewController的setToolbarItems方法,则工具栏项不会更新。那么在不重新加载整个视图的情况下重新加载UINavigationController的UIToolbar的方法是什么。

由于

1 个答案:

答案 0 :(得分:0)

我有类似的问题。当用户离开我的应用程序以更改“设置”中的颜色方案时,需要更新导航栏,文本和颜色属性。我能够更新导航栏颜色,但导航栏文本颜色没有得到更新。我的解决方案:我没有使用'故事板'。在我的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设置为nil,但是当用户离开并重新启动应用时,它也会设置为nil 。我唯一担心的是我将rootViewController重新分配给window,但我认为ARC将负责我的记忆管理。 为了完成这项工作,我在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
}