0

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

谢谢

4

1 回答 1

0

我有一个类似的问题。当用户离开我的应用程序以更改“设置”中的配色方案时,需要更新导航栏、文本和颜色属性。我能够更新导航栏颜色,但导航栏文本颜色没有更新。我的解决方案:我没有使用“故事板”。在我的AppDelegate.h 我有:

@property (….) CustomViewController *viewController;
@property (….) UINavigationController *nav; 

我没有@synthesizeAppDelegate.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 会负责我的内存管理。 为了完成这项工作,我在重新启动时再次调用该方法nilnilrootViewControllerwindowapplicationWillEnterForeground:

[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
}
于 2014-03-31T14:35:18.417 回答