【发布时间】:2014-07-31 17:08:43
【问题描述】:
我有一个从服务器获取数据的异步例程。当点击导航中的刷新按钮时,我将其替换为UIActivityIndicatorView,这部分工作正常。获取数据的对象有一个协议,当它完成检索数据时通知它的委托。当委托(UITableViewController 子类)接收到该方法时,我用新数据重新加载表视图,并为rightBarButtonItem 分配一个新的刷新按钮。但是,当我这样做时,UIBarButtonItem 不会改变。当我在分配之前调用 reloadData 方法时和之后调用它时都会发生这种情况。我不明白为什么根本没有发生这种变化。这是我正在使用的两个方法调用。
这行得通:
UIActivityIndicatorView *indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicatorView.color = [UIColor orangeColor];
[indicatorView startAnimating];
[self.navigationItem.rightBarButtonItem initWithCustomView:indicatorView];
这是行不通的:
self.navigationItem.rightBarButtonItem initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshOrderList:)];
我应该以不同的方式更改这些barButtonItems 吗?
【问题讨论】:
-
你确定你在主线程上吗?
-
网络对象在 [NSURLConnection sendAsynchronousRequest...] 的完成处理程序中调用委托方法。这不是在主线程上吗?
-
这不是这样做的方法。
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshOrderList:)]; -
好了,我们开始吧。我在接受的答案中看到了我在这个网站上使用的方法。感谢您的澄清。
-
自定义视图初始化也是如此。
标签: ios objective-c uinavigationcontroller uibarbuttonitem