gpt4 book ai didi

ios - 启用 BarButtonItem 后仍然显示为非事件状态

转载 作者:行者123 更新时间:2023-11-29 12:00:17 25 4
gpt4 key购买 nike

这是我在 SO 上发表的第一篇文章。我是一名参加代码学校的程序员新手。

我的问题是我有一个用 Swift 编写的 iOS 应用程序。初始 View Controller 是一个带有嵌入式 TableViewController 的 UINavigationController。它在右侧有一个名为“新游戏”的 BarButtonItem。我在 ViewDidLoad 中将此按钮设置为禁用。

newGameButton.enabled = false

启动时运行一些代码以从服务器检索一些 JSON 数据。当它成功返回时(非常快),我想启用 BarButton Item。我这样做:

newGameButton.enabled = true

BarButtonItem 确实有效,尽管它仍然是灰色的,因为我可以点击它,这会将我带到另一个 TableViewController。然后该按钮立即显示为事件状态。或者,如果我只是坐下来等待大约 15 秒,“新游戏”按钮最终将变为事件状态。但是,如果我立即旋转,无论是在 iOS 模拟器中还是在 iPhone 上运行应用程序时,它都会立即正确显示为处于事件状态。

我搜索了 SO 并尝试了以下建议但没有成功:

self.navigationItem.rightBarButtonItem?.enabled = true

我还尝试为导航栏和父 View 启用用户交互,结果相同。

self.navigationController?.navigationBar.userInteractionEnabled = true
self.navigationController?.view.userInteractionEnabled = true

我曾尝试寻找某种方法来“强制”导航 Controller 进行更新,但一无所获。

我期待听到有关如何解决此问题的想法。

作为附加说明,我们获取 JSON 数据的请求使用的是 NSURLSession,我知道它是异步的,因此不会阻止 UI 更新。

最佳答案

您是否在后台线程中设置启用属性?为了正确地进行 UI 更新,您需要在主线程上进行视觉更改。

dispatch_async(dispatch_get_main_queue(), {
newGameButton.enabled = true
})

关于ios - 启用 BarButtonItem 后仍然显示为非事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37289107/

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