当您长按(突出显示)它所在的单元格时会触发哪个按钮状态?
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
并返回到Default
或Selected
修饰状态。
更新: 我同意这是出乎意料的行为。您可以创建 UIButton 的子类并重新实现此调用以将其留空以防止调用超级方法:
- (void)setHighlighted:(BOOL)highlighted;
例子:
@interface XButton : UIButton
@end
@implementation XButton
- (void)setHighlighted:(BOOL)highlighted
@end
这应该可以防止表的状态改变。
【讨论】:
我添加了可能的解决方案。请尝试。【参考方案2】:当您单击并按住按钮时,被调用的状态是突出显示的状态,因此当您释放单击时,状态返回到 UIControlStateNormal
【讨论】:
我会这么认为。这个突出显示的状态称为UIControlStateHighlighted
感谢 Kquane,但问题不是“当我长按按钮时会发生什么?”,而是“当我长按一个按钮?”以上是关于当您长按(突出显示)它所在的单元格时会触发哪个按钮状态?的主要内容,如果未能解决你的问题,请参考以下文章