Проверяйте текстовое поле после каждого введенного символа - PullRequest
0 голосов
/ 25 сентября 2011

Я искал ответ, но не могу найти ответ, связанный с этим.

Я пытаюсь проверить каждый ввод в текстовое поле, но не знаю, как это сделать. Идея состоит в том, чтобы проверить, существует ли имя пользователя на сервере, поэтому я предполагаю, что мне нужно публиковать на сервере каждый раз, когда что-то вводится, и если успех, то делай что угодно.

Может кто-нибудь сообщить, пожалуйста, я был бы благодарен.

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011

Реализуйте метод делегата textField:shouldChangeCharactersInRange:replacementString:, чтобы получать информацию о каждом изменении в тексте. Верните YES или NO в зависимости от того, хотите ли вы принять изменение или нет.

Вероятно, это очень плохая идея - запрашивать разрешение на каждое нажатие клавиши на сервере, так как это приведет к недопустимому запаздыванию и приведет к очень плохому впечатлению пользователя.

2 голосов
/ 25 сентября 2011

Вы можете использовать addTarget:action:forControlEvents: с UIControlEventValueChanged (например: [textfield addTarget:self action:@selector(usernameChanged:) forControlEvents:UIControlEventValueChanged). Это сообщит вам ПОСЛЕ изменения текста (поэтому, когда вы получите usernameChanged:, у вас будут последние изменения).

Вероятно, это хорошая идея, что вместо того, чтобы отправлять запрос на сервер каждый раз, когда имя пользователя изменяется, вы либо отправляете запрос, когда текстовое поле теряет заголовок, либо когда проходит некоторое время после последнего изменения (вы можете использовать NSTimer для это).

Вы должны использовать один асинхронный запрос. Если запрос активен и текстовое поле снова редактируется, вы должны отменить запрос и установить его равным nil (поскольку нет смысла проверять старое имя пользователя). Если запрос выполнен успешно, отображается значок или все, что вы хотите сделать, когда получаете результат с сервера.

Изменить: Не уверен, что UIControlEventValueChanged работал на предыдущих версиях iOS или это была ошибка с моей стороны, но, похоже, больше не работает. UIControlEventEditingChanged следует использовать вместо.

2 голосов
/ 25 сентября 2011

То, что говорит Оле, абсолютно правильно.Я просто дам вам пример того, что он говорит.

Сначала приведите ваш класс в соответствие с протоколом UITextFieldDelegate.Затем убедитесь, что в viewDidLoad (или аналогичном) вы устанавливаете делегата для своего класса:

myTextField.delegate = self;

Затем вы можете реализовать метод, о котором упоминал Оле.Однако в вашем случае вы не проверяете, может ли пользователь ввести что-либо или нет, вы просто хотите узнать , что он ввел, чтобы вы могли проверить его в Интернете.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    [self verifyTheUserWithUsername:[textField.text stringByReplacingCharactersInRange:range withString:string]];
    //do your appropriate check here
    return YES; //we allow the user to enter anything
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...