2013-02-12 1 views
0

У меня странная проблема - когда я регистрирую TapGestureRecognizer в методе cellForRowAtIndexPath, он отлично работает, но когда я регистрирую TapGestureRecognizer в методе метода initWithStyle в методе Cell, не работает, точка останова не попадает в обработчик ,TapGestureRecognizer не работает в пользовательском TableViewCell

Следующие работы.

Я создал пользовательскую ячейку вида таблицы с соответствующим xib-файлом и зарегистрировал ее.

[self.tableView registerNib:[UINib nibWithNibName:@"MyCell" 
               bundle:[NSBundle mainBundle]] 
     forCellReuseIdentifier:@"cell"]; 
... 

and in the cellForRowAtIndexPath 
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
... 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                      action:@selector(didTapCell:)]; 
    [tap setNumberOfTapsRequired:1]; 
    [cell addGestureRecognizer:tap]; 

Ниже не работает

@implementation MyCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleCellTap:)]; 
     [tgr setDelegate:self]; 
     [tgr setNumberOfTapsRequired:1]; 
     [tgr setNumberOfTouchesRequired:1]; 

     [self addGestureRecognizer:tgr]; 
     //[self.contentView addGestureRecognizer:tgr]; also doesn't work 
    } 
    return self; 
} 

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

Почему распознавание красок не работает, если я регистрирую распознаватель в инициализации ячейки?

+0

изменить эту строку [tgr setNumberOfTouchesRequired: 1]; с [tgr setNumberOfTouchesRequired: 2] ;, Его работа для меня ... –

ответ

1

Вы зарегистрировали xib для конкретного идентификатора ячейки. Теперь tableview будет автоматически создавать ячейки для вас, если это необходимо (когда вы вызываете dequeReusableCell ...), но метод initWithStyle: reuseIdentifier не вызывается, поэтому ваш распознаватель жестов никогда не создается/не добавляется.

Если вам нужно использовать «init» при использовании зарегистрированных xib (s), переопределите awakeFromNib в своем пользовательском классе ячеек и поместите там свой код. Я обычно добавляю свой код init в отдельный метод и вызываю его как из initWithStyle, так и из awakeFromNib.

+0

Спасибо, работает! – Madman

2

Вы уверены, что initWithStyle:reuseIdentifier называется? Afaik вам нужно использовать initWithCoder:, если вы зарегистрируете наконечник для ячейки.

В проекте шахты я это

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
     pan.delegate = self; 
     self.gestureRecognizers = [NSArray arrayWithObject:pan]; 
    } 
    return self; 
} 

Так я использую панорамирование жест распознаватель и работает в рамках метода инициализации.

+1

Спасибо! Ваши решения также отлично работают! Я проголосовал за вас обоих, но отметил один с более низким рейтингом. – Madman

+0

Спасибо! отличное решение, плюс +1 для этого – user577732

 Смежные вопросы

  • Нет связанных вопросов^_^