我有一个 UITableViewCell 里面带有一个包含图片的 UIButton。当单元格处于高亮状态时,按钮也会进入高亮状态(即图像变为较暗色),无论用户是否在按钮范围内点击。
我不需要这个功能 - 我只想在点击按钮时突出显示按钮,而不是整个单元格被点击时。
我尝试将高亮状态下的图像设置为与正常图像相同。这样可以解决问题,但是它会阻止按钮在真正被突出显示时改变颜色。
有什么方法可以实现所需效果吗?
我有一个 UITableViewCell 里面带有一个包含图片的 UIButton。当单元格处于高亮状态时,按钮也会进入高亮状态(即图像变为较暗色),无论用户是否在按钮范围内点击。
我不需要这个功能 - 我只想在点击按钮时突出显示按钮,而不是整个单元格被点击时。
我尝试将高亮状态下的图像设置为与正常图像相同。这样可以解决问题,但是它会阻止按钮在真正被突出显示时改变颜色。
有什么方法可以实现所需效果吗?
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;
}
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
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[yourButton setHighlighted:NO];
// do something cool
}
我采用了不同的方法,它更加简单,希望对你有用。只需在上述两个委托方法中将按钮的高亮状态设置为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添加一个目标/操作,以更新其高亮状态图像到所需的内容,然后为UIControlEventTouchUpInside/UIControlEventTouchUpOutside/UIControlEventTouchCancel添加另一个目标/操作,以将高亮图像重置为与正常状态图像相匹配的内容。
- (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];
}
交换各行可能导致按钮的高亮显示。