tableView: indexPathForCell возвращает ноль - PullRequest
38 голосов
/ 03 августа 2011

Я использую метод tableView:indexPathForCell для реализации пользовательского делегата, который может динамически изменять размер UITableViewCell на основе размера кадра UIWebView, который находится внутри него.Проблема в том, что tableView:indexPathForCell возвращает nil, когда я пытаюсь выяснить, что такое indexPath конкретной ячейки:

- (void)trialSummaryTableViewCell:(TrialSummaryTableViewCell *)cell shouldAssignHeight:(CGFloat)newHeight {
    NSIndexPath *indexPath = [tableV indexPathForCell:cell];
    NSLog(@"tableV: %@\ncell: %@\nindexPath: %@", tableV, cell, indexPath); //<-- 
    // ...
}

Здесь tableV не возвращает nil, ячейка делаетне возвращается nil, но indexPath возвращает nil.

Что я делаю не так?

Редактировать: я звоню -(void)trialSummaryTableViewCell из tableView:cellForRowAtIndexPath: метода

Ответы [ 3 ]

123 голосов
/ 10 августа 2012

Возможно, в данный момент клетка не видна. tableView: indexPathForCell возвращает ноль в этой ситуации. Я решил это с помощью indexPathForRowAtPoint, этот метод работает, даже если ячейка не видна. Код:

UITableViewCell *cell = textField.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];
13 голосов
/ 03 августа 2011

[tableV indexPathForCell: cell] возвращает nil, если ячейка не видна.

Также, если вы вызываете метод «trialSummaryTableViewCell» из метода «cellForRowAtIndexPath», вы также можете легко передать indexPath в метод «trialSummaryTableViewCell»..

4 голосов
/ 16 июня 2014

Небольшое обновление, так как ответ Jorge Perez не удастся начать с iOS7 (так как UIScrollView был вставлен и вызов textField.superview.superview больше не будет работать).

Вы можете получить NSIndexPath следующим образом:

//find the UITableViewCell superview
UIView *cell = textField;
while (cell && ![cell isKindOfClass:[UITableViewCell class]])
    cell = cell.superview;

//use the UITableViewCell superview to get the NSIndexPath
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...