Прокрутите до ячейки и получите подпредставление - PullRequest
1 голос
/ 17 декабря 2010

У меня есть ячейки в таблице с настраиваемыми полями, которые позволяют вводить числа с помощью настраиваемой цифровой клавиатуры.Это включает в себя вкладку.При переходе от нижней части таблицы к верхней части мне нужно (i) прокрутить таблицу до верхней части и (ii) выбрать настраиваемое поле в этой таблице.

Я обнаружил, что если я позвонюcellForRowAtIndexPath непосредственно после того, как я вызвал scrollToRowAtIndexPath, первый возвращает пустую ячейку.При повторном вызове после завершения прокрутки ячейка возвращается, как и ожидалось.Мне нужна сама ячейка, чтобы я мог получить пользовательский вид по значению тега и выбрать его.

Я пытался найти решение.Можно было бы вставить задержку после прокрутки, чтобы она могла завершиться.Но я попытался с помощью executeSlector: withObject: afterDelay без успеха.

Это мой код, вызываемый при нажатии вкладки.

-(void) customDualViewTabbed:(CustomDualView *)dualView {

 UITableViewCell *cell=(UITableViewCell*)([dualView superview].superview);
 NSIndexPath *fromIndexPath=[self.tableView indexPathForCell:cell];
 NSIndexPath *toIndexPath;

 if ((fromIndexPath.row+1)<[self.tableView numberOfRowsInSection:fromIndexPath.section]){
  toIndexPath = [NSIndexPath indexPathForRow:(fromIndexPath.row+1) inSection:fromIndexPath.section];
 }
 else {
  toIndexPath = [NSIndexPath indexPathForRow:0 inSection:fromIndexPath.section];
  [[self tableView] scrollToRowAtIndexPath:toIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
 }

 //get cell we tabbed to
 cell=[self.tableView cellForRowAtIndexPath:toIndexPath];

 CustomDualView *dualView2 =(CustomDualView *)[cell viewWithTag:dualView.tag];

 [dualView2  setSelected:(SelectedState)SelectedLeftTabbed];
}

1 Ответ

1 голос
/ 17 декабря 2010

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

Теперь, поскольку UITableview соответствует протоколу UIScrollViewDelegate, вы можете реализовать эти методы делегирования в дополнение к методам UITableViewDelegate. Реализация той, которая вам известна, будет вызвана, когда ваша ячейка будет видна, например, scrollViewDidEndDecelerating:, а затем вызов вашего cellForRowAtIndexPath может сработать.

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