iOS - игнорирование жеста касания - PullRequest
1 голос
/ 24 августа 2011

У меня есть UITapGestureRecognizer в пользовательской ячейке таблицы, которая предназначена для того, чтобы ничего не делать (уберите возможность нажать на ячейку, чтобы выбрать ее). Это прекрасно работает, однако в ячейке есть несколько кнопок (подпредставлений), которые нельзя нажать, потому что жест касания обрабатывает всю область ячейки.

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

Я удалил логику и просто возвратил НЕТ в распознаватель жестов, но я все еще не могу нажимать кнопки.

- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch
{
    return NO;
}

Есть ли что-то, чего мне здесь не хватает?

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

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

  • вернуть nil из -tableView:willSelectRowAtIndexPath:, чтобы сделать ее недоступной для выбора
  • установите для ячейки selectionStyle на UITableViewCellSelectionStyleNone, чтобы удалить эффект выделения

Выполнение этого способа должно сохранить функциональность вашей кнопки.


Редактировать: Если вы не хотите этого делать, тогда вы можете делать то, что пытались изначально - кроме того, я думаю, что вы неправильно указали имя метода, оно должно быть следующим:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
0 голосов
/ 05 октября 2012

, чтобы сделать это, я сделал такую ​​кнопку:

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self addTarget:self action:@selector(touchDown) forControlEvents:UIControlEventTouchDown];
    [self addTarget:self action:@selector(touchUpInside) forControlEvents:UIControlEventTouchUpInside];
    [self addTarget:self action:@selector(touchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
}

- (void)touchDown
{
    self.imageView.image = [UIImage imageNamed:@"ButtonPressed.png"];
}

- (void)touchUpInside
{
    self.imageView.image = [UIImage imageNamed:@"Button.png"];
}

- (void)touchUpOutside
{
    self.imageView.image = [UIImage imageNamed:@"Button.png"];
}

- (void)setHighlighted:(BOOL)highlighted
{
    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...