UIButton в UITableViewCell - PullRequest
       13

UIButton в UITableViewCell

36 голосов
/ 02 декабря 2010

У меня есть UIButton с изображением внутри UITableViewCell. Когда ячейка подсвечивается, кнопка также переходит в подсвеченное состояние (т. Е. Более темный оттенок изображения), независимо от того, нажимает пользователь в пределах кнопки или нет.

Мне не нужна эта функция - я хочу, чтобы кнопка выделялась только при нажатии кнопки, а не при нажатии всей ячейки.

Я попытался установить изображение в выделенном состоянии так же, как нормальное изображение. Это устраняет проблему, однако останавливает изменение цвета кнопки, когда она действительно выделена.

Есть идеи, как добиться желаемого эффекта?

Ответы [ 7 ]

57 голосов
/ 28 февраля 2011

Это сводило меня с ума. Я понял, что вам нужно переопределить 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;
}
2 голосов
/ 22 мая 2015
Предложение

кодекафина у меня не сработало (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
}
2 голосов
/ 02 декабря 2010

Один из подходов состоит в том, чтобы «отменить выбор» или «отменить выделение» кнопки, когда выбрана ячейка табличного представления:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  [yourButton setHighlighted:NO];
  // do something cool
}
1 голос
/ 31 июля 2013

Я использовал другой подход, он немного проще, надеюсь, он вам подойдет.Просто установите выделенное состояние кнопки на 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;
}
0 голосов
/ 06 августа 2013

Чтобы это работало, мне пришлось использовать следующие подклассы на UITableViewCell Объект '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];
}

Пересечение различных строк может привести к выделению кнопки.

0 голосов
/ 02 декабря 2010

Возможный обходной путь: вы выбираете стиль выбора ячеек none. В том случае, если вы выделите ячейку, она не будет выделена.

Это единственный возможный обходной путь. Может быть, у тебя в уме есть другие вещи.

0 голосов
/ 02 декабря 2010

На самом деле это не пробовали, но не могли бы вы добавить цель / действие к кнопке для UIControlEventTouchDown, которая обновила его изображение в подсвеченном состоянии до того, что вы хотели, а затем другую цель / действие для UIControlEventTouchUpInside / UIControlEventTouchUpOutside / UIControlEventTouchCancel, которая сбрасываетвыделенное изображение соответствует изображению в нормальном состоянии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...