2014-11-21 3 views
4

У меня есть прокручиваемый UITableView внутри UIScrollView. И у меня проблема: когда я касаюсь строки, обратный вызов didSelectRowAtIndexPath: не вызывается при первом нажатии, но после первого нажатия работает.UITableView (внутри UIScrollView) didSelectRowAtIndexPath: не вызывается при первом касании

Несколько соображений:

  • После первого крана, табличные работает нормально, каждый кран работает в каждой клетке.
  • Это происходит сразу после прокрутки UIScrollView. Если я не прокручу UIScrollView, этого никогда не произойдет.
  • Я обогнал UIScrollView touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view, и событие действительно проходит здесь, view - это UITableViewCellContentView.

Я просто не знаю, почему событие не было отправлено в UITableView в первый раз и на следующие его действия.

+2

Дважды проверьте, чтобы убедиться, что вы не используете - Tableview: didDeselectRowAtIndexPath: вместо didSelectRowAtIndexPath – Vig

+0

@Vig Да, после первого Tap моего внедрения didSelectRowAtIndexPath это называют. – 6rod9

+0

Почему вы вставляете невидимый вид таблицы в прокрутке в первую очередь? – sha

ответ

1

Если у вас есть UIScrollView, содержащий вертикальное содержание и UITableView как часть этого содержания, вы должны по крайней мере отключить прокрутку на UITableView - в противном случае это запутанным для пользователя, когда он будет прокручиваться ваш mainView и когда tableView, а также запутанным для потому что неясно, куда отправлять пергаментные жесты.

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

+1

Прокрутка на представлении таблицы эффективно отключена. :/ – 6rod9

+0

Как именно это «эффективно» отключено? – sha

+0

Я отключил прокрутку в раскадровке UITableView флажок «Прокрутка включена». Я предполагаю, что в представлении прокрутки все еще считают, что первый косвенный элемент является частью предыдущих прокручивающих событий, но до сих пор не имеет понятия, почему. – 6rod9

0

Отключите прокрутку табличного вида и проверьте, что источник данных и делегат подключены к вашему представлению таблицы. Если не следовать сильфон кода

@interface myClass()<UITableViewDataSource, UITableViewDelegate> 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.myTableView.scrollEnabled = NO; 
    self.myTableView.delegate = self; 
    self.myTableView.dataSource = self; 
} 
Смежные вопросы