UITableViewCell中的UIButton

我有一个UITableViewCell里面的图像的UIButton。 当单元格被加亮时,不pipe用户是否在button的边界内点击,button也都进入高亮状态(即,图像的较暗的阴影)。

我不想要这个function – 我只希望点击button时突出显示button,而不是点击整个单元格。

我试图设置图像突出显示的状态是一样的正常图像。 这解决了这个问题,但是当它真的被突出显示时,它停止了改变颜色的button。

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

这让我疯狂。 我发现你需要重写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; } 

一种方法是在select表视图单元格时“取消select”或“取消select”button:

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

codecaffeine的build议并不适用于我(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 } 

我使用了一种不同的方法,这有点简单,我希望它适合你。 只需在上面两个委托方法中将button的突出显示状态设置为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; } 

实际上没有尝试过这个,但是你可能会添加一个目标/动作到UIControlEventTouchDown的button,它将高亮状态图像更新为你想要的,然后UIControlEventTouchUpInside / UIControlEventTouchUpOutside / UIControlEventTouchCancel的另一个目标/动作,将高亮显示的图像重置为匹配正常状态的图像?

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

这只是可能的解决方法。 可能是你有其他的东西在你的脑海里。

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

 - (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]; } 

互换各行可能会导致button突出显示。