我有一个UIButton,其中包含UITableViewCell内的图像。当单元格高亮显示时,无论用户是否在按钮范围内单击,该按钮也会进入高亮显示状态(即图像的较暗色调)。
我不想要这个功能 - 我只想在单击按钮时突出显示按钮,而不是在单击整个单元格时突出显示。
我尝试将突出显示状态的图像设置为与普通图像相同。这解决了这个问题,但它突然停止按钮更改颜色。
任何想法如何达到预期的效果?
答案 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];
}
颠倒各行可能会突出显示按钮。