UINavigationBar直到表视图更新后才更新栏按钮项

时间:2014-07-30 17:55:52

标签: ios objective-c uitableview uinavigationcontroller uinavigationitem

我在导航控制器中嵌入了一个UITableViewController。我的rightBarButtonItem是一个刷新按钮。按下时,该按钮会触发服务器的更新。更新是同步的(当我有时间时,我将其更改为异步请求)。我想做的事情在理论上听起来很简单。按下按钮后:

  • 将条形按钮项更改为UIActivityIndi​​catorView
  • 刷新数据
  • 重新加载tableView
  • 将条形按钮项目更改回刷新按钮。

然而,发生的事情是我将rightBarButton设置为带有活动指示器视图的视图,但是在之后表视图重新加载时它才会更新,这显然毫无意义。我的服务器更新例程如下所示:

  • View Controller调用单独的模型对象"刷新"方法
  • 模型对象从服务器同步获取新数据
  • 查看控制器调用[self.tableView reloadData];

由于它是同步的,我认为它只会一步一步地前进,但那不起作用。我怎样才能使activityIndi​​catorView显示并消失?

1 个答案:

答案 0 :(得分:1)

当您修改导航栏时,修改实际上不会立即应用于屏幕,它们将在下一个屏幕更新周期或下一个屏幕刷新或下一次重绘期间应用。

在您的代码中,您似乎在设置导航栏后立即向服务器发送同步请求。该请求现在阻止主线程,并且系统无法刷新屏幕,因为所有UI代码都在主线程上运行。

使用异步请求,或者只是在另一个线程上发送请求,或者您希望尝试同步请求的其他一些巫术将帮助您解决问题。但是这些解决方案的本质是主线程不会被任何同步方法阻止。