UITutton在UITableViewCell中

时间:2010-12-02 05:25:31

标签: iphone uitableview uibutton

我有一个UIButton,其中包含UITableViewCell内的图像。当单元格高亮显示时,无论用户是否在按钮范围内单击,该按钮也会进入高亮显示状态(即图像的较暗色调)。

我不想要这个功能 - 我只想在单击按钮时突出显示按钮,而不是在单击整个单元格时突出显示。

我尝试将突出显示状态的图像设置为与普通图像相同。这解决了这个问题,但它突然停止按钮更改颜色。

任何想法如何达到预期的效果?

7 个答案:

答案 0 :(得分:57)

这让我发疯了。我发现您需要覆盖setHighlighted:animated:setSelected:animated:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];
    self.yourButton.highlighted = NO;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    self.yourButton.selected = NO;
    // If you don't set highlighted to NO in this method,
    // for some reason it'll be highlighed while the 
    // table cell selection animates out
    self.yourButton.highlighted = NO;
}

答案 1 :(得分:2)

选择表格视图单元格时,一种方法是“取消选择”或“取消选中”按钮:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  [yourButton setHighlighted:NO];
  // do something cool
}

答案 2 :(得分:2)

codecaffeine的建议对我不起作用(iOS 8.3),但确实让我走上正轨。我这样修改它(虽然它在Swift中):

override func setHighlighted(highlighted: Bool, animated: Bool) {
    var colorBefore = self.myButton.backgroundColor
    super.setHighlighted(highlighted, animated: animated)
    self.myButton.highlighted = false
    self.myButton.backgroundColor = colorBefore
}

答案 3 :(得分:1)

我使用了不同的方法,它有点容易,我希望它适合你。只需在上面两个委托方法中将按钮的突出显示状态设置为false:

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    UIButton *btnAction = (UIButton *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:3];
    btnAction.highlighted = NO;
}


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIButton *btnAction = (UIButton *) [[tableView cellForRowAtIndexPath:indexPath] viewWithTag:3];
    btnAction.highlighted = NO;
}

答案 4 :(得分:0)

实际上没有尝试过这个,但是你可以在UIControlEventTouchDown的按钮上添加一个目标/动作,将其突出显示的状态图像更新为你想要的,然后是UIControlEventTouchUpInside / UIControlEventTouchUpOutside / UIControlEventTouchCancel的另一个目标/动作重置突出显示图像以匹配正常状态图像?

答案 5 :(得分:0)

可能的解决方法是,将单元格选择样式设置为none。在这种情况下,当您选择单元格时,它不会突出显示。

这只是可能的解决方法。也许你有其他想法。

答案 6 :(得分:0)

为了使它工作,我不得不在UITableViewCell上使用以下子类。 “按钮”对象是自定义单元格内的按钮:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [self.button setShowsTouchWhenHighlighted:NO];
    [super setHighlighted:highlighted animated:animated];

    self.button.highlighted = NO;
    [self.button setShowsTouchWhenHighlighted:YES];
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [self.button setShowsTouchWhenHighlighted:NO];
    [super setSelected:selected animated:animated];
    self.button.highlighted = NO;

    // Configure the view for the selected state
    [self.button setShowsTouchWhenHighlighted:YES];
}

颠倒各行可能会突出显示按钮。