Ответ 1
Вызов self (делегат), а не сам tableView.
id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
Я хочу узнать содержимое ячейки при возврате heightForRowAtIndexPath. В этой функции, как я могу получить объект ячейки?
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
}
Если я попробую этот
[tableView cellForRowAtIndexPath:indexPath]
он терпит неудачу и отключается в бесконечном цикле.
Любая идея?
Вызов self (делегат), а не сам tableView.
id cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
Используйте: func dequeueReusableCellWithIdentifier(identifier: String) -> AnyObject?
of UITableView
.
Не использовать: func dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath) -> AnyObject
Возможная причина: heightForRowAtIndexPath
вызывается до cellForRowAtIndexPath
, и этот метод использует путь индекса для выполнения дополнительной настройки на основе позиции ячеек в представлении таблицы. Но так как до сих пор нет ячейки, поэтому, по-моему, это бесконечный цикл.
Ячейка не была создана, когда вызывается heightForRowAtIndexPath:
, поэтому нет возможности "получить" ячейку. Вместо этого посмотрите на свою модель и определите высоту ячейки таким образом.
Если вы беспокоитесь о длинных строках и нуждаетесь в большем вертикальном пространстве в своей ячейке, рассмотрите возможность использования sizeWithFont:forWidth:lineBreakMode:
. Документы здесь: https://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html
Я не думаю, что ты можешь или должен. Вам нужно будет определить из indexPath, какие данные вы будете отображать в соответствующей ячейке и, следовательно, вычислить необходимую высоту ячейки.
Таким образом, вам нужно будет написать код, чтобы получить от indexPath нужные данные в вашей модели данных.
uitableviewcell *ce=[self.view viewwithtag:indexPath.row];
он возвращает объект ячейки.