Объект текстового поля отправляет сообщение shouldChangeCharactersInRange
своему делегату с вопросом, разрешено ли изменение (добавление нового символа или удаление символа) или нет. Поскольку вы не хотите отказываться от каких-либо изменений, внесенных в само текстовое поле, вы должны вернуть YES
из этого метода. Предупреждение
control reaches end of non-void function
означает, что у вас есть не пустая функция, поэтому вы должны что-то вернуть. Так как ничего не возвращалось, это сообщение появилось.
Важно помнить, что этот метод делегата вызывается до изменения, что имеет смысл, поскольку у делегата запрашивается разрешение на разрешение или запрещение изменения. Если делегат отказывается, значение текстового поля останется неизменным независимо от того, что пользователь вводит. * * 1010
Так что вызов userInput.text
бесполезен, потому что он вернет старое значение, так как изменение еще не было сделано. Однако в параметрах этого метода достаточно информации, чтобы построить новое значение текстового поля.
NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string]);
Полный метод будет выглядеть так:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
BOOL isFieldEmpty = [newText isEqualToString:@""];
sendButton.enabled = !isFieldEmpty;
return YES;
}