当您长按(突出显示)它所在的单元格时会触发哪个按钮状态?

Posted

技术标签:

【中文标题】当您长按(突出显示)它所在的单元格时会触发哪个按钮状态?【英文标题】:Which button state is triggered when you long-click (highlight) the cell in which it exists? 【发布时间】:2012-05-26 07:47:40 【问题描述】:

我有一个包含按钮的自定义表格视图单元格视图。我将按钮初始化为setBackgroundImage 在其正常状态下为一个空圆圈。我还setImage 勾选了选中状态的图像。

    checkmarkButton = [[UIButton alloc] initWithFrame:CGRectMake(kLeftMargin, kTopMargin, kButtonSize, kButtonSize)];
    [checkmarkButton setBackgroundImage:[UIImage imageNamed:@"empty-circle.png"] forState:UIControlStateNormal];
    [checkmarkButton setImage:[UIImage imageNamed:@"checkmark.png"] forState:UIControlStateSelected];
    [checkmarkButton addTarget:self action:@selector(checkmarkButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self.contentView addSubview:checkmarkButton];

当按钮被点击时,我将按钮设置为选中并被告知重绘,使按钮看起来像一个带有复选标记的圆圈。再次单击它,selected 被设置为NO,并且单元格被告知重新绘制,使其成为一个空圆圈。

- (void)checkmarkButtonPressed:(id)sender

    [checkmarkButton setSelected:!checkmarkButton.selected];

    [managedObjectContext save:nil];

我的问题是此按钮存在于自定义表格视图单元格视图中,它似乎以我无法识别的方式控制它的绘制方式。当我长按(在单元格中按下并停留在单元格中而不触摸一段时间)在其按钮设置为选中的单元格上(应该在一个圆圈中显示一个复选标记),复选标记消失,直到我触摸。当我触摸时,单元格的状态是正确的。当我长按单元格时,这是错误的。

那么,当我长按单元格时,如何控制该按钮的绘制方式?

【问题讨论】:

【参考方案1】:

我不确定这是否正是您的情况,因为我没有看到您的消息来源。但请检查按钮的Highlighted 状态。当UIButton 放置在UITableViewCell 上时,表格控制您的UIButton:在单元格触摸下(长触摸)UIButton 以及UITableViewCell 将其状态更改为Highlighted 并返回到DefaultSelected修饰状态。

更新: 我同意这是出乎意料的行为。您可以创建 UIButton 的子类并重新实现此调用以将其留空以防止调用超级方法:

- (void)setHighlighted:(BOOL)highlighted;

例子:

@interface XButton : UIButton
@end

@implementation XButton
- (void)setHighlighted:(BOOL)highlighted  
@end

这应该可以防止表的状态改变。

【讨论】:

我添加了可能的解决方案。请尝试。【参考方案2】:

当您单击并按住按钮时,被调用的状态是突出显示的状态,因此当您释放单击时,状态返回到 UIControlStateNormal

【讨论】:

我会这么认为。这个突出显示的状态称为UIControlStateHighlighted 感谢 Kquane,但问题不是“当我长按按钮时会发生什么?”,而是“当我长按一个按钮?”

以上是关于当您长按(突出显示)它所在的单元格时会触发哪个按钮状态?的主要内容,如果未能解决你的问题,请参考以下文章

UIActionSheet 只显示一次

从引用的单元格更改单元格时,如何突出显示该单元格?

UITableView 失去选中状态 iOS

UITableView 选择单元格时所有组件都更改了背景颜色

使用委托从按钮传递信息以突出显示单元格

点击时突出显示 tableview 单元格,按下警报控制器操作按钮时取消突出显示