当选择UITableViewCell时,防止自定义AccessoryView显示选择

时间:2010-12-23 16:14:58

标签: iphone objective-c uitableview accessoryview

要重现这一点,请创建一个UITableView,其中包含具有自定义AccessoryViews的单元格(例如,执行特定操作的按钮,其中触摸UITableViewCell的其他部分应执行不同的操作)。

如果触摸(选择)UITableView,AccessoryView也会显示选择(如同触摸的那样)。我想阻止它,并且只在实际触及AccessoryView时显示AccessoryView的选定状态。

提前致谢,

groomsy

4 个答案:

答案 0 :(得分:5)

当UIButton设置为UITableViewCell的accessoryView时,如果选择了superview(UITableViewCell),将为accessoryView(本例中为UIButton)调用setHighlighted。

要解决此问题,我们需要子类化UIButton,覆盖其setHighlighted setter,以忽略其superview是否被选中或是否突出显示。

<强> AccessoryViewUIButton.m

#import "AccessoryViewUIButton.h"


@implementation AccessoryViewUIButton

// Subclass only works for buttonWithType:custom

- (id)initWithFrame:(CGRect)aRect
{
    // Call the superclass's designated initializer 
    self = [super initWithFrame:aRect];

    return self;
}

- (void)setHighlighted:(BOOL)isHighlighted {

    /* Overridden to do nothing if superview is selected or highlighted */

    UITableViewCell* theCell = (UITableViewCell*) self.superview;

    if ([self.superview isKindOfClass:[UITableViewCell class]]) {
        if ([theCell isSelected] || [theCell isHighlighted])
            return;
    }

    [super setHighlighted:isHighlighted];
}

- (void)dealloc {
    [super dealloc];
}


@end

答案 1 :(得分:2)

您使用的是自定义UITableViewCell子类吗?我会尝试这样做并压倒一切 setSelected:(BOOL)selected为该课程确保按照您的意愿处理事情。

答案 2 :(得分:0)

轻触表格单元格时,附件视图不会发光或显示选择。我想你希望tableViewCell的蓝色选择状态在accessoryViews背景上不可见。那是对的吗?

我建议创建自己的自定义tableViewCell,并将单元格的selectionStyle设置为UITableViewCellSelectionStyleNone,并将tableRowSelection处理为单独的单元格侧的setSelected状态,而不是附件视图。

或者只是将附件视图的背景稍大一点,不要将backgroundColor设置为clearColor。这样,单元格的选择状态也不会显示在附件视图上。

答案 3 :(得分:0)

对表格视图单元格进行子类化,并覆盖以下方法:

- (void) setHighlighted: (BOOL) highlighted;
- (void) setHighlighted: (BOOL) highlighted
               animated: (BOOL) animated;
- (void) setSelected: (BOOL) selected;
- (void) setSelected: (BOOL) selected
            animated: (BOOL) animated;

并确保在调用超类方法后,按钮的selected highlighted状态会重置为NO