UITableViewCell из подпредставления contentView - PullRequest
1 голос
/ 28 февраля 2012

Я создал ячейки с метками и использовал checkaMarksAccessory.Несколько последних ячеек имеют UITextFields, которые могут использовать пользовательские модификации, а те имеют селектор на UIControlEventEditingDidEnd, где я хочу изменить состояние ячейки на проверенное.

Как получить ячейку в селекторе?У объекта нет родительского вида?

Способ вставки объекта в ячейку.

    UITextField *textfield = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 200, 30)];
    [textfield setBorderStyle:UITextBorderStyleRoundedRect];
    [textfield addTarget:self action:@selector(vybavaDidFinishEdit:) forControlEvents:UIControlEventEditingDidEnd];
    [cell.contentView addSubview:textfield];

Ответы [ 2 ]

1 голос
/ 17 октября 2013

Я не уверен, можно ли предположить 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.

0 голосов
/ 13 марта 2012

ОК, так что использовать Superview. Суперпредставление является компонентом, которому принадлежит объект. Если я хочу получить UITableViewCell из UITextField, я использовал [[UITextField superview] superview].

...