gpt4 book ai didi

ios - UINavigationBar 在 TableView 更新后才更新条形按钮项目

转载 作者:行者123 更新时间:2023-11-29 12:40:42 27 4
gpt4 key购买 nike

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

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

然而,发生的事情是,我将 rightBarButton 设置为一个带有事件指示器 View 的 View ,但直到 TableView 重新加载后它才会更新,这显然毫无意义。我的服务器更新例程如下所示:

  • View Controller 调用一个单独的模型对象的“刷新”方法。
  • 模型对象同步从服务器获取新数据
  • View Controller 调用 [self.tableView reloadData];

由于它是同步的,我原以为它只会一次进步一步,但这是行不通的。我怎样才能使 activityIndi​​catorView 按预期显示和消失?

最佳答案

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

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

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

关于ios - UINavigationBar 在 TableView 更新后才更新条形按钮项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25043687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com