Я хочу, чтобы UItextField, находящийся в UITableViewCell, стал первым респондентом только при касании ячейки - PullRequest
5 голосов
/ 07 июля 2011

Вот чего я пытаюсь достичь:

Я хочу, чтобы UITextField в UITableViewCell стал первым респондентом только при прикосновении к ячейке. Я хотел бы, чтобы текстовое поле стало первым респондентом, только когда я установил его первым респондентом в методе:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

Есть идеи, как мне этого добиться? При непосредственном прикосновении к текстовому полю tableView:didSelectRowAtIndexPath: никогда не вызывается.

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 08 июля 2011

Полагаю, у вас есть пользовательский UITableViewCell. В этом у вас может быть член UITextField. Правильно?

В пользовательском классе ячеек переопределите метод,

- (void)setSelected:(BOOL)selected animated:(BOOL)animated:

В этом случае, если выбрано == ДА, сделать текстовое поле первым ответчиком В противном случае подать в отставку первого ответчика.

1 голос
/ 07 июля 2011

Чтобы textField стал first responder, когда выбран uitableviewcell, используйте ваш textField в качестве property и вызовите [self.textField1 becomeFirstResponder];

Примечание. Вам понадобится столько свойств, сколько у вас UITableViewCells, поскольку в каждой ячейке есть textField.

При касании textField компилятор не будет знать , что соответствующая строка выбрана. Для этого вам нужно будет использовать tags, например textField.tag == 0 для первого textField, textField.tag ==1 для второго TextField и так далее. А в textFieldDidBeginEditing вы должны проверить тег, а затем связать это значение с соответствующей выбранной строкой.

Что-нибудь из этого имело смысл? :)

1 голос
/ 07 июля 2011

Во-первых, вам нужна пользовательская ячейка таблицы, ваш собственный подкласс UITableViewCell.В этой реализации вам нужно реализовать hitTest:, чтобы определить, где произошло касание.В этом методе вы можете определить, действительно ли касание было внутри прямоугольника вашего UITextField, и, если оно было, сделать его первым респондентом.Вот пример из некоторого кода, который я написал для проекта:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (self.editing) {
        if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil])
            return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event];

        return [super hitTest:point withEvent:event];
    }

    return [self contentView];
}

Атрибут nickname, в данном случае, был UITextField внутри пользовательского UITableViewCell.

Условие вокруг себя.редактирование может иметь или не иметь отношение к вашему приложению.Идея здесь в том, чтобы показать вам, как можно использовать hitTest: в общем.

1 голос
/ 07 июля 2011

Позвольте объекту быть делегатом UITextField и реализовать textFieldShouldBeginEditing:;вернуть NO, если ячейка не была выбрана.(Вы можете всегда иметь возможность вернуть NO из этого метода, если вызов becomeFirstResponder напрямую обходит проверку.)

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