Я не уверен, можно ли предположить cell.contentView.superview == cell
.Может ли Apple изменить это?Я сомневаюсь.Но я не вижу нигде в документации, где говорится, что представление содержимого ячейки является прямым подпредставлением ячейки.
Если вы добавили UIGestureRecognizer
к одному из ваших подпредставлений представления содержимого ячейки, тогда вы можете получить ссылку на ячейку с помощью:
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[gestureRecognizer locationInView:self.tableView]];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
Пример кода анимации и жестов табличного представления использует indexPathForRowAtPoint:
таким образом.
Если вам необходимоПройдя суперпредставления, я думаю, что использование функции, подобной приведенной ниже, немного безопаснее.
UITableViewCell *ACMContentViewGetCell(UIView *view)
{
while ((view = view.superview)) {
if ([view isKindOfClass:[UITableViewCell class]]) {
return (UITableViewCell *)view;
}
}
return nil;
}
Но эта функция по-прежнему предполагает, что contentView
находится в пределах ее cell
, чего я также не видел нигде вдокументация.
Так что, возможно, лучшее решение - это перестроить ваш код так, чтобы вам не нужно было получать cell
из contentView
или, если нужно, добавить переменную экземпляра из подпредставленияот contentView
до cell
.