【发布时间】:2014-03-21 08:46:42
【问题描述】:
**Background** 当我的应用加载时,UINavigationController 会以编程方式添加并给出 leftBarButtonItem 和 rightBarButtonItem。在启动期间会检查是否需要新数据,如果需要,则运行一个方法从我们的 Web 服务器获取新数据。在此期间,rightBarButtonItem 更改为 UIActivityIndicatorView,它将显示旋转活动指示器。数据下载完成后,rightBarButtonItem 返回到UIBarButtonItem。这很好用。
在另一个UIViewController 上,我需要允许用户手动获取新数据并将他们的数据发送给我们。在此期间,我需要 rightBarButtonItem 像以前一样更改为UIActivityIndicatorView。但是当我尝试这样做时,数据下载正常,但rightBarButtonItem 永远不会改变。
我认为我的问题可能与我无法引用 UINavigationController 及其导航项有关。
**代码** 我的第一个 UIViewController's 实现,其中更改了 rightBarButtonItem:
-(void)statusIsLoading{
UIActivityIndicatorView *uiLoading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
uiLoading.hidesWhenStopped = YES;
NSLog(@"Start animating");
[uiLoading startAnimating];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:uiLoading];
}
-(void)statusFinishedLoading{
UIActivityIndicatorView *uiLoading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
uiLoading.hidesWhenStopped = YES;
[uiLoading stopAnimating];
UIBarButtonItem *showSettingsButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Settings.png"] style:UIBarButtonItemStylePlain target:self action:@selector(showSettings:)];
self.navigationItem.rightBarButtonItem = showSettingsButton;
}
**我尝试过的** 我尝试在第二个 UIViewController 中设置 self.navigationItem.rightBarButtonItem 但这没有任何作用。我还尝试运行从实例化类中调用上述两种方法的方法:
InitViewController *ivcInstance = [[InitViewController alloc] init];
[ivcInstance performUpdate];
这可以很好地运行“performUpdate”代码,“performUpdate”方法称为“statusIsLoading”和“statusFinishedLoading”方法,但rightBarButtonItem 没有改变。
我认为这里缺少一些非常简单的东西。谢谢。
**Edit** 我刚刚尝试在第二个 UIViewController 的 pageLoad 上检查 rightBarButtonItem 的当前值,它似乎为零:
UIBarButtonItem *newItem = self.navigationItem.rightBarButtonItem;
这里 newItem = nil。我没有定位正确的导航项吗?它应该是“自我”以外的东西吗?
**编辑 2**
在第二个 UIViewController 中,我可以更改 navigationBar 的属性:
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:0.6 green:0.01 blue:0.36 alpha:2.0f]];
但如果我尝试对 barButtonItem 进行相同操作,则没有任何反应,这是为什么呢?
[self.navigationController.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:uiLoading]];
与:
[self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:uiLoading]];
【问题讨论】:
标签: ios objective-c cocoa-touch uinavigationcontroller