Включение кнопки Готово после вставки одного символа в текстовое поле: textFieldDidEndEditing: или textFieldShouldBeginEditing: or?
Я хотел бы включить кнопку "Готово" на панели навигации (в модальном представлении), когда пользователь пишет хотя бы символ в uitextfield. Я попробовал:
- textFieldDidEndEditing: включает кнопку, когда предыдущий uitextfield уходит в отставку первого ответчика (так с нулевыми символами в текущем uitextfield).
- textFieldShouldBeginEditing: вызывается, когда текстовое поле становится первым ответчиком. Есть ли другой способ сделать это?
[EDIT]
решение может быть
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
, но ни
[self.navigationItem.rightBarButtonItem setEnabled:YES];
или
[doneButton setEnabled:YES]; //doneButton is an IBOutlet tied to my Done UIBarButtonItem in IB
работа.
7 ответов
правильный код;
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger length = editingTextField.text.length - range.length + string.length;
if (length > 0) {
yourButton.enabled = YES;
} else {
yourButton.enabled = NO;
}
return YES;
}
редактировать: Как правильно отметил MasterBeta раньше и Дэвид лари позже, событие должно реагировать на изменение редактирования. Я обновляю ответ решением Дэвида лари, поскольку это было отмечено как правильное.
- (IBAction)editingChanged:(UITextField *)textField
{
//if text field is empty, disable the button
_myButton.enabled = textField.text.length > 0;
}
но shouldChangeCharactersInRange
не вызывается, когда кнопка Clear пользователя в текстовое поле. И ваша кнопка должна быть отключена, когда текстовое поле остается пустым.
A IBAction
может быть связано с Редактирование Изменен событие в текстовое поле. И он будет вызываться, когда пользователи набирают или нажимают кнопку clear.
- (IBAction) editDidChanged: (id) sender {
if (((UITextField*)sender).text.length > 0) {
[yourButton setEnabled:YES];
} else {
[yourButton setEnabled:NO];
}
}
@MasterBeta: почти правильно. Следуйте его инструкциям, чтобы подключить действие к Редактирование Изменен, но этот код проще и не имеет опечаток:
- (IBAction)editingChanged:(UITextField *)textField
{
//if text field is empty, disable the button
_myButton.enabled = textField.text.length > 0;
}
этой ответ, похоже, работает во всех сценариях. Один символ, ясно и все изменения. Надеюсь, кто-то найдет это полезным.
Swift 2.2
вы можете назначить пользовательский метод " checkTextField ()" для "myTextField" UITextField как:
myTextField.addTarget(self, action: #selector(self.checkTextField(_:)), forControlEvents: .EditingChanged);
и переключить кнопку Готово внутри метода как:
func checkTextField(sender: UITextField) {
doneButton.enabled = !sender.hasText();
}
нет необходимости в каком-либо делегате.
попробуйте и пойдите с:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
int lenght = editingTextField.text.length - range.length + string.length;
if (lenght > 0) {
yourButton.enabled = YES;
} else {
yourButton.enabled = NO;
}
return YES;
}
этот ответ был отмечен правильно, когда infact лучшее решение существовало "w4nderlust" ниже. Это их ответ, пусть они берут на себя ответственность!