仅在执行任务时隐藏 UIBarButtonItem

Posted

技术标签:

【中文标题】仅在执行任务时隐藏 UIBarButtonItem【英文标题】:Hide UIBarButtonItem only while a task is performing 【发布时间】:2013-01-28 19:10:12 【问题描述】:

我有一个带有刷新 rightBarButtonItem 的导航栏,我想在刷新时隐藏它。

我尝试将其设置为 nil,然后在任务完成后将其设置回刷新按钮,但任务可能太快所以不显示。

还有什么办法可以隐藏吗?

我想给用户一个反馈,即刷新按钮在我正在使用的 MBProgressHUD 之外被点击。

【问题讨论】:

任务是否可能需要时间,或者您只是希望按钮具有快速闪烁效果? 我希望任务尽可能快(它正在解析来自网站的数据)。一个快速的闪光效果就可以了。 此处选择的解决方案可能会有所帮助,但很可能需要进行一些修改:***.com/questions/6893181/… 问题是 UIBarButtonItem 没有 setAlpha 属性。 【参考方案1】:

您想要做的不是删除它,而是禁用它,这会使它“变灰”。

使用此代码:

rightBarButtonItem.enabled = NO;[rightBarButtonItem setEnabled: NO]; 取决于您的语法选择。

您首先需要对 rightBarButtonItem 有一个引用,这可以通过使用 IBOutlet 来实现。

【讨论】:

我尝试在我的头文件中为 UIBarButtonItem 添加 IBOutlet,然后在刷新按钮调用的方法中,我将其设置为启用 = NO,当任务完成后我将其设置回是的,仍然没有反馈。有什么想法吗?谢谢! 你的任务是运行在主线程还是后台线程?如果它是主线程,您可能会阻塞 UI。当 UI 能够更新时,您已经将 enable 重置为 YES。 它在主线程上,我阻塞了 UI。有什么办法吗? (我希望 UI 在任务运行时保持阻塞) 确保在开始阻塞线程之前设置 UIBarButtonItem。如果不能解决,请将有问题的代码上传到 Github 的 gist 中。

以上是关于仅在执行任务时隐藏 UIBarButtonItem的主要内容,如果未能解决你的问题,请参考以下文章

在 KeyboardDidShow 上切换 UIBarButtonItem

UIBarButtonItem 仅在按下足够长的时间时才会触发动作

对于 iPhone - 但不是 iOS 模拟器 - UIToolbar UIBarButtonItem 将仅在长按时突出显示,而不是在点击时突出显示

让 UITouch 仅在触摸特定颜色时执行任务

如果结果已经可用,则仅在单击按钮时启动异步任务并执行操作,否则等待结果然后执行操作

iPhone仅在第一页隐藏导航栏