启用BarButtonItem后仍显示无效

时间:2016-05-18 02:13:49

标签: ios iphone uinavigationcontroller swift2 uibarbuttonitem

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

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

newGameButton.enabled = false

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

newGameButton.enabled = true

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

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

self.navigationItem.rightBarButtonItem?.enabled = true

我还尝试为navigationBar和父视图启用用户交互,结果相同。

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

我已经尝试过寻找一些方法来强迫'导航控制器更新,但空手而归。

我期待听到关于如何解决这个问题的想法。

另外请注意,我们获取JSON数据的请求是使用我理解为异步的NSURLSession,因此不会阻止UI更新。

2 个答案:

答案 0 :(得分:1)

您是否在后台线程中设置了enabled属性?为了使UI更新正确发生,您需要在主线程上进行可视化更改。

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

答案 1 :(得分:0)

需要{@ 1}}

的条形按钮

巴扣的前景色为灰色。为了获得禁用效果。

条形按钮未响应self.navigationController.navigationBar.userInteractionEnabled = false属性。

否则你可以选择带有自定义视图的barbutton