启用 BarButtonItem 后仍然显示为非活动状态
After enable of BarButtonItem still appears inactive
这是我第一次 post 到 SO。我是一名上代码学校的程序员新手。
我的问题是我有一个用 Swift 编写的 iOS 应用程序。初始视图控制器是带有嵌入式 TableViewController 的 UINavigationController。它在右侧有一个名为 'New Game' 的 BarButtonItem。我在 ViewDidLoad 中将此按钮设置为禁用。
newGameButton.enabled = false
启动时,一些代码是 运行 从服务器检索一些 JSON 数据。当成功 returns 时,这非常快,我想启用 BarButton Item。我这样做:
newGameButton.enabled = true
BarButtonItem 确实有效,尽管它仍然是灰色的,因为我可以点击它,这会将我带到另一个 TableViewController。然后该按钮立即显示为活动状态。或者,如果我只是坐下来等待大约 15 秒,'New Game' 按钮最终将变为活动状态。但是,如果我立即旋转,无论是在 iOS 模拟器中还是在 运行 iPhone 上的应用程序时,它都会立即正确显示为处于活动状态。
我搜索了 SO 并尝试了以下建议但没有成功:
self.navigationItem.rightBarButtonItem?.enabled = true
我还尝试为导航栏和父视图启用用户交互,结果相同。
self.navigationController?.navigationBar.userInteractionEnabled = true
self.navigationController?.view.userInteractionEnabled = true
我试过寻找一些方法来 'force' 导航控制器进行更新,但空手而归。
我期待听到有关如何解决此问题的想法。
作为附加说明,我们获取 JSON 数据的请求使用的是 NSURLSession,我知道它是异步的,因此不会阻止 UI 更新。
您需要 self.navigationController.navigationBar.userInteractionEnabled = false
的条形按钮
条形按钮的前景色为灰色。为了获得禁用效果。
栏按钮没有响应 enabled
属性。
否则你可以使用带自定义视图的条形按钮
您是否在后台线程中设置启用 属性?为了 UI 更新正确发生,您需要在主线程上进行视觉更改。
dispatch_async(dispatch_get_main_queue(), {
newGameButton.enabled = true
})
这是我第一次 post 到 SO。我是一名上代码学校的程序员新手。
我的问题是我有一个用 Swift 编写的 iOS 应用程序。初始视图控制器是带有嵌入式 TableViewController 的 UINavigationController。它在右侧有一个名为 'New Game' 的 BarButtonItem。我在 ViewDidLoad 中将此按钮设置为禁用。
newGameButton.enabled = false
启动时,一些代码是 运行 从服务器检索一些 JSON 数据。当成功 returns 时,这非常快,我想启用 BarButton Item。我这样做:
newGameButton.enabled = true
BarButtonItem 确实有效,尽管它仍然是灰色的,因为我可以点击它,这会将我带到另一个 TableViewController。然后该按钮立即显示为活动状态。或者,如果我只是坐下来等待大约 15 秒,'New Game' 按钮最终将变为活动状态。但是,如果我立即旋转,无论是在 iOS 模拟器中还是在 运行 iPhone 上的应用程序时,它都会立即正确显示为处于活动状态。
我搜索了 SO 并尝试了以下建议但没有成功:
self.navigationItem.rightBarButtonItem?.enabled = true
我还尝试为导航栏和父视图启用用户交互,结果相同。
self.navigationController?.navigationBar.userInteractionEnabled = true
self.navigationController?.view.userInteractionEnabled = true
我试过寻找一些方法来 'force' 导航控制器进行更新,但空手而归。
我期待听到有关如何解决此问题的想法。
作为附加说明,我们获取 JSON 数据的请求使用的是 NSURLSession,我知道它是异步的,因此不会阻止 UI 更新。
您需要 self.navigationController.navigationBar.userInteractionEnabled = false
条形按钮的前景色为灰色。为了获得禁用效果。
栏按钮没有响应 enabled
属性。
否则你可以使用带自定义视图的条形按钮
您是否在后台线程中设置启用 属性?为了 UI 更新正确发生,您需要在主线程上进行视觉更改。
dispatch_async(dispatch_get_main_queue(), {
newGameButton.enabled = true
})