UIBarButtonItem 在视图更改之前不会被禁用

Posted

技术标签:

【中文标题】UIBarButtonItem 在视图更改之前不会被禁用【英文标题】:UIBarButtonItem not disabled until view changes 【发布时间】:2012-12-08 00:26:53 【问题描述】:

我有一个 UINavigationController 并且正在使用我的一个视图控制器中的工具栏。我有几个 UIBarButtonItems。在不同的点上,我禁用了工具栏中的某些按钮,使用 _btnEdit.enabled = NO 之类的东西。

这一切都很好,除了有一次没有用户交互时发生这种情况。在这种情况下,按钮似乎已启用(未灰显),但不接受触摸。如果我用某些东西(底部的操作表)覆盖栏或更改设备的方向,它会正确显示。

我试过self.navigationController.toolbar setNeedsDisplay][self.navigationController.toolbar drawRect:self.navigationController.toolbar.bounds] 但都没有任何效果。

有关如何“刷新”此视图的任何想法?我知道 UIBarButtonItems 不是从 UIView 继承的,我觉得这可能是造成问题的原因。

【问题讨论】:

在设置时检查 _btnEdit 是否为 nil。 不是零。当方向改变时,按钮被禁用进一步显示了这一点。 您能否输入更多代码来解释您如何禁用按钮以及在何种情况下无法正常工作。 【参考方案1】:

这是预期的行为。 setNeedsDisplay 是一个很好的反射尝试,但您不拥有导航栏和 UIBarButtonItem doesn't inherit from UIView,因此我们需要对它们有所不同。 在这里你可以如何实现你的目标:

UIBarButtonItem *bbi = self.navigationItem.rightBarButtonItem;
bbi.enabled = NO;
[self.navigationItem setRightBarButtonItem:bbi animated:YES];

注意:selfUIViewController 我刚刚对此进行了快速测试,它正在工作。

【讨论】:

这可能有效,但按钮位于工具栏中,而不是右侧栏按钮项。不过,我让它工作的方式是相似的。更改启用状态后,我只是调用:[self.navigationController setToolbarHidden:YES animated:NO]; [self.navigationController setToolbarHidden:NO animated:NO];,这会强制工具栏重绘。 @Ned UIToolBar 你有没有以同样的方式尝试setItems:animated

以上是关于UIBarButtonItem 在视图更改之前不会被禁用的主要内容,如果未能解决你的问题,请参考以下文章

添加到情节提要的 UIBarButtonItem 在运行时不会出现

在执行自定义 segue 之前禁用工具栏 UIBarButtonItem

更改 UIBarButtonItem 的 UIToolbar 阴影颜色

快速更改 UINavigationBar 中 UIBarButtonItem 的宽度

动态创建的 UIBarButtonItem 不会在点击时触发

在swift中更改UINavigationBar中UIBarButtonItem的宽度