UIBarButtonItem在视图没有改变前无法禁用

3

我有一个UINavigationController,并在其中一个视图控制器中使用了工具栏。 我有几个UIBarButtonItems。 在不同的时间点,我会禁用工具栏中的某些按钮,使用像_btnEdit.enabled = NO这样的东西。

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

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

有什么想法可以“刷新”此视图吗? 我知道UIBarButtonItems不继承自UIView,我觉得这可能是问题的原因之一。


设置时,请检查_btnEdit是否为空。 - iDev
它不是空的。当方向改变时,按钮被禁用进一步表明了这一点。 - Ned
你能否添加更多代码来解释如何禁用按钮,以及在哪种情况下它无法正常工作。 - Srikanth
1个回答

3

这是预期的行为。setNeedsDisplay 是一种不错的反应,但您不拥有导航栏,并且 UIBarButtonItem 不继承自 UIView,因此我们需要稍微不同地考虑它们。
以下是实现目标的方法:

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

注意: self 是一个 UIViewController
我刚做了一个快速测试,发现它能正常工作。


这可能有效,但按钮在工具栏中,而不是正确的栏按钮项。我让它工作的方式类似,虽然。在我更改启用状态后,我只是调用了:[self.navigationController setToolbarHidden:YES animated:NO]; [self.navigationController setToolbarHidden:NO animated:NO];,这强制工具栏重新绘制。 - Ned
@Ned UIToolBar,你尝试过使用相同的方式调用 setItems:animated 吗? - Vincent Bernier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接