如何以编程方式获取 UIBarButtonItems 的状态?

Posted

技术标签:

【中文标题】如何以编程方式获取 UIBarButtonItems 的状态?【英文标题】:How do I programmatically get the state of UIBarButtonItems? 【发布时间】:2012-06-26 14:32:17 【问题描述】:

使用UIControl,例如UIButton,您可以使用类似 myControl.state 判断控件当前是否被按下。

但是,我需要对一些 UIBarButtonItems(不是从 UIControl 派生的)做同样的事情,这样我就可以在其中一个被按下时停止编辑表格。

这是我的代码:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
    //other checks
    for(int b=0; b<self.toolbar.items.count; b++)
    
        UIControl *currentControl= [self.toolbar.items objectAtIndex:b];
        if(currentControl.state==UIControlStateHighlighted)
        
            return NO;
        
    
    return YES;

显然,它不起作用,因为它假定 UIBarButtonItems 可以 被视为 UIControls,但是我将如何做我在这里尝试做的事情?

【问题讨论】:

你说得对,好心的先生。 你想实现什么功能? 我的应用程序中有一个表格,可以在其中滑动单元格以进入编辑模式并显示删除按钮。但是,当用户同时按下按钮或工具栏按钮之一时进入单元格上的编辑模式时,我遇到了错误。因此,我想让在按住按钮时无法进入编辑模式。只是一个波兰的东西。 就像他们将手指按住单元格或某处的按钮,然后在他们仍然按住第一个按钮的同时点击编辑按钮?为什么不只是在 touchDown 期间禁用编辑模式并在 touchUp 时重新启用编辑按钮 实际上,UIBarButtonItems 只允许设置一个操作,并且它们也不允许您选择它用于哪个控件事件。 【参考方案1】:

如果您想对UIBarButtonItems 进行更多控制,最好的办法是将它们重新创建为UIButtons(使用自定义艺术等),然后使用UIBarButtonItem-initWithCustomView 从以下位置创建按钮项实际的 UIViews。

这将使您可以完全访问通常的按钮交互方法:唯一的缺点是默认情况下您不会获得漂亮的条形按钮样式,并且您必须自己为此提供艺术。

【讨论】:

【参考方案2】:

我之前也遇到过类似的问题。我无法修复它,所以我继续前进。这是我所做的:

使用 ToolBar 代替导航栏,然后使用 UIButton 代替工具栏中的 UIBarButtonItem。

【讨论】:

为什么需要使用工具栏而不是导航栏?您可以将自定义 UIBarButtonItems 添加到导航栏和工具栏。

以上是关于如何以编程方式获取 UIBarButtonItems 的状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将自定义图像设置为 UIBarButtonItem

如何以编程方式将 UIBarButtonItem 添加到拖到视图上的 UINavigationBar

以编程方式添加UIBarButtonItem

以编程方式创建和显示 UIBarButtonItem 的正确方法是啥?

以编程方式从 UIBarButtonItem

导航栏中的 UIBarButtonItem 以编程方式?