Запретить пользовательский AccessoryView показывать выбор, когда выбран его UITableViewCell - PullRequest
2 голосов
/ 23 декабря 2010

Чтобы воспроизвести это, создайте UITableView, который содержит ячейки с пользовательскими AccessoryViews (например, кнопки для выполнения определенного действия, при котором касание другой части UITableViewCell должно выполнять другое действие).

Если коснуться (выберите) UITableView, AccessoryView показывает выбор (как думал, что он был затронут), а также.Я хочу предотвратить это и отображать выбранное состояние AccessoryView только тогда, когда они фактически касаются AccessoryView.

Заранее спасибо,

groomsy

Ответы [ 4 ]

5 голосов
/ 08 февраля 2011

Когда UIButton установлен как accessoryView для UITableViewCell, setHighlighted будет вызываться для accessoryView (в данном случае UIButton), когда выбрано его суперпредставление (UITableViewCell).

Чтобы исправить это, нам нужнодля подкласса UIButton, переопределите его setHighlighted setter, чтобы игнорировать, если его суперпредставление isSelected или isHighlighted.

AccessoryViewUIButton.m

#import "AccessoryViewUIButton.h"


@implementation AccessoryViewUIButton

// Subclass only works for buttonWithType:custom

- (id)initWithFrame:(CGRect)aRect
{
    // Call the superclass's designated initializer 
    self = [super initWithFrame:aRect];

    return self;
}

- (void)setHighlighted:(BOOL)isHighlighted {

    /* Overridden to do nothing if superview is selected or highlighted */

    UITableViewCell* theCell = (UITableViewCell*) self.superview;

    if ([self.superview isKindOfClass:[UITableViewCell class]]) {
        if ([theCell isSelected] || [theCell isHighlighted])
            return;
    }

    [super setHighlighted:isHighlighted];
}

- (void)dealloc {
    [super dealloc];
}


@end
2 голосов
/ 23 декабря 2010

Используете ли вы пользовательский UITableViewCell подкласс? Я бы попробовал сделать это и переопределить setSelected:(BOOL)selected для этого класса, чтобы убедиться, что все обрабатывается, как вы хотите.

0 голосов
/ 18 сентября 2012

Создайте подкласс ячейки табличного представления и переопределите следующие методы:

- (void) setHighlighted: (BOOL) highlighted;
- (void) setHighlighted: (BOOL) highlighted
               animated: (BOOL) animated;
- (void) setSelected: (BOOL) selected;
- (void) setSelected: (BOOL) selected
            animated: (BOOL) animated;

и убедитесь, что состояния кнопки selected и highlighted сброшены на NO послевызов метода суперкласса.

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

Вспомогательный вид не будет светиться или отображать выделение при нажатии на ячейку таблицы.Я думаю, вы хотите, чтобы состояние выбора синего цвета tableViewCell не было видно на фоне accessoryViews.это правильно?

Я бы предложил создать собственный настраиваемый tableViewCell и установить для selectionStyle ячейки значение UITableViewCellSelectionStyleNone и обработать tableRowSelection для состояния setSelected только для стороны ячейки, а не для дополнительного представления.* или просто сделайте фон дополнительного вида немного больше и не устанавливайте его backgroundColor в clearColor.таким образом, состояние выбора ячейки также не будет отображаться на accessoryView.

...