2017-01-03 4 views
0

Что может привести к тому, что setHighlighted:animated: будет называться прикосновением, а не касанием вниз? У меня есть очень тонкий подклассы UITableViewCell, только состоящий из следующих способов:SetHighlighted получает вызов при прикосновении, а не прикосновении вниз

- (void)awakeFromNib 

- (void)updateWithStuff:(NSString *)stuff 

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated 

Но setHighlighted:animated: вызывается на ощупь вверх, а не вниз прикосновением. Я попытался установить

self.selectionStyle = UITableViewCellSelectionStyleNone; 

, а также

self.tableView.delaysContentTouches = NO; 

official documentation ничего не знает о точно не говорят, когда setHighlighted называется, но несколько StackOverflow ответов, кажется, соглашаются, что это первый называется при касании вниз, и что setHighlighted:animated: называется позже.

Является ли моя информация неправильной, и есть ли новый/лучший способ получить события соприкосновения в ячейке?

EDIT:

Я попытался удалить любые UIGestureRecognizers, имеющие отношение к представлению. Я также попытался использовать UITableViewCell по умолчанию и использовать стиль выбора по умолчанию, и получаю те же результаты. Он выделяется при отпускании.

+0

Я считаю, что так оно и работает. В действиях iOS обычно срабатывают при касании, а не касаются. Выбранное действие, вероятно, будет таким же. –

+0

@ DuncanC В этой демонстрации, однако, она работает так, как я ожидаю, что она будет работать (setHighlighted получает вызов при касании). https://github.com/hossamghareeb/Facebook-POP-Tutorial –

+0

Неправильно: он вызывается на обоих. – SwiftArchitect

ответ

0

setHighlighted вызывается на ощупь вверх, а не приземлится

На самом деле, она вызывается на обоих:

  • на ощупь вниз с highlighted = true
  • на подкрасить highlighted = false

Кроме того, свежие ячейки отправляются setHighlighted с highlighted = false после отображения. См синхронизацию сообщений в анимации ниже:

2 distinct highlighted
↻ replay animation

Вы звоните super?

class TableViewCell: UITableViewCell { 
    var row = 0 

    override func setHighlighted(_ highlighted: Bool, animated: Bool) { 
     super.setHighlighted(highlighted, animated: animated) 
     print("setHighlighted row \(1+row): \(highlighted) animated: \(animated)") 
    } 
} 
+0

Благодарим за внимание, но проблема остается. Кажется, что оба вызова, правда и ложь, происходят при прикосновении. Ничего при прикосновении –

+0

Помогло бы мне, если бы я разместил образец проекта? – SwiftArchitect

+0

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

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