0

我有一个包含按钮的自定义表格视图单元格视图。我将按钮初始化为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];
}

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

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

4

2 回答 2

0

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

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

- (void)setHighlighted:(BOOL)highlighted;

例子:

@interface XButton : UIButton
@end

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

这应该可以防止通过表格改变状态。

于 2012-05-26T08:06:47.680 回答
0

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

于 2012-06-07T06:59:19.973 回答