UITableViewCell setHighlighted: (BOOL) выделенный всегда ложно - PullRequest
0 голосов
/ 20 июня 2019

Я переопределяю класс UITableViewCell, чтобы добавить в свои клетки эффект ряби / чернил. Основываясь на компоненте материала iOS Список , единственное, что мне нужно сделать, это переопределить метод setHighlighted следующим образом:

- (void)setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
    if (highlighted) {
        [self startInk];
    } else {
        [self endInk];
    }
}

Эта техника работает с UICollectionViewCell, но я не уверен, должна ли она работать с UITableViewCell.

1

Всякий раз, когда я нажимаю на ячейку и не поднимаю палец, этот метод никогда не вызывается. Вызывается только когда и поднять его, и highlighted всегда false.

Кто-нибудь знает, как переопределить это долгое нажатие, чтобы запустить анимацию?

Заранее благодарю!

1 Ответ

0 голосов
/ 21 июня 2019

Я наконец-то получил его, переопределив (void) touchSegan: withEvent: метод. Это мой код, основанный на компоненте материалов iOS Список :

@property(strong, nonatomic, nonnull) MDCInkView *inkView;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self];
    self.lastTouch = location;
    if (self.selectionStyle != UITableViewCellSelectionStyleNone){
        NSInteger selectionStyle = self.selectionStyle;
        self.selectionStyle = UITableViewCellSelectionStyleNone;
        [UIView animateWithDuration:0.25f
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             [self startInk];
                         }completion:^(BOOL finished) {
                             [UIView animateWithDuration:0.25f
                                                   delay:0.0
                                                 options:UIViewAnimationOptionCurveEaseOut
                                              animations:^{
                                                  [self endInk];
                                              }completion:^(BOOL finished) {
                                                  self.selectionStyle = selectionStyle;
                                              }];
                         }];
    }
    [super touchesBegan:touches withEvent:event];
}

- (void)startInk {
    [self.inkView startTouchBeganAtPoint:_lastTouch animated:YES withCompletion:nil];
}

- (void)endInk {
    [self.inkView startTouchEndAtPoint:_lastTouch animated:YES withCompletion:nil];
}


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