iOS - UITableViewCell,突出显示时设置子视图背景图像

时间:2014-04-06 18:27:05

标签: ios objective-c uitableview subview

我按如下方式定义UITableViewCell(和子视图):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell"];

    cell = [[UITableViewCell alloc]init]; // Without this, subviews stack on one another

    ... cell stuff (textLabel, etc)

    UIButton *buttonDown = [[UIButton alloc] init];
    [buttonDown setFrame:CGRectMake(190.0, 7.0, 40.0, 30.0)];
    [buttonDown setBackgroundImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];
    [buttonDown setBackgroundImage:[UIImage imageNamed:@"buttonSelected"] forState:UIControlStateHighlighted];
    [buttonDown setTitle:@"-" forState:UIControlStateNormal];
    buttonDown.tag = indexPath.row;
    [buttonDown addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside];

    [cell addSubview:buttonDown];

    return cell;
}

按钮使用正确的背景颜色初始化,按钮在我选择时正确调用该方法,但选择后背景颜色不会改变。

我已经尝试将它放在方法调用中,如下所示:

- (void) quantityDown:(id)sender {
    UIButton *btn = (UIButton *)sender;
    [btn setBackgroundImage:[UIImage imageNamed:@"buttonSelected"] forState:UIControlStateHighlighted];
}

但仍然没有骰子。即使是简单的[btn setBackGroundColor:[UIColor redColor]];也无法解决问题。

提前致谢。

编辑#1:

所以我正在玩这个,按钮背景图像更改,但只有按住按钮(而不是快速点击或点击)。

即使创建自定义单元格也具有相同的“必须按住按钮才能更改背景”的要求。自定义单元格定义如下:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
        self = [nibArray objectAtIndex:0];

        [self setSelectionStyle:UITableViewCellSelectionStyleNone];

        [self.downButton setBackgroundImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];
        [self.downButton setBackgroundImage:[UIImage imageNamed:@"buttonSelected"] forState:UIControlStateHighlighted];
    }
    return self;
}

由于自定义单元格与原始代码具有完全相同的行为,因此我试图坚持使用原始代码。无论如何,有什么想法延迟/需要按住按钮?为什么不是即时的,就像其他地方我使用setBackgroundImage:forState:方法一样?

1 个答案:

答案 0 :(得分:1)

请参阅此文章,了解UIScrollView中的按钮突出显示延迟:Is it possible to remove the delay of UIButton's highlighted state inside a UIScrollView?

UITableView是UIScrollView的子类。