#iphone #objective-c #ios #xcode #keyboard
#iPhone #objective-c #iOS #xcode #клавиатура
Вопрос:
У меня есть IBAction, связанный с EditingDidBegin для всех моих UITextFields, так почему следующий код не работает при нажатии на UITextFields?
-(IBAction)keyboardShouldShow
{
[self becomeFirstResponder];
NSLog(@"Keyboard Showing");
}
Также имейте в виду, что клавиатура не будет отображаться, если этот код не будет добавлен из-за другого кода, который у меня есть в файле проекта.
Спасибо
Ответ №1:
ваше «я» — это не ваше текстовое поле.попробуйте изменить метод на этот и повторно связать его с editingdidbegin.
-(IBAction)keyboardShouldShow:(UITextField*)sender
{
[sender becomeFirstResponder];
NSLog(@"Keyboard Showing");
}
ПРИВЕТ
Комментарии:
1. Эта ошибка связана с тем, что у вас есть событие начала редактирования, связанное с keyboardShouldShow, а не с keyboardShouldShow: .Вернитесь в interface builder, удалите избыточную ссылку и повторно свяжите ее с этим методом.
2. ошибка устранена, но, к сожалению, клавиатура не отображается, когда начинается редактирование UITextField. Почему это?
3. Входит ли он в метод (проверка журнала)? Вы уверены, что взаимодействие пользователя с текстовым полем было включено?
4. у него есть, инструкция NSLog появляется при начале редактирования, за исключением самого действия ([отправитель становится первым ответчиком];) не происходит 🙁
5. о, тогда извини, приятель, я в тупике. Я протестировал becomeFirstResponder, и он выводит клавиатуру для меня. Кстати, я попытался сделать так, чтобы клавиатура не отображалась (автоматически), и потерпел неудачу. Как вам это удалось?
Ответ №2:
Потому что self
это ваш контроллер просмотра, а не UITextField
.
Используйте UITextFieldDelegate
метод:
- (void) textFieldDidBeginEditing:(UITextField *)textField {
if ([textField isKindOfClass:[UITextField class]]) {
[textField resignFirstResponder];
NSLog(@"Keyboard Showing");
}
}
И если вы хотите использовать свой собственный метод, обязательно передайте UITextField
в качестве параметра.
Измените метод на что-то вроде:
-(IBAction)keyboardShouldShow:(id)sender {
if ([sender isKindOfClass:[UITextField class]]) {
[sender resignFirstResponder];
NSLog(@"Keyboard Showing");
}
}
Комментарии:
1. итак, что я могу поставить вместо «self»?
2. в первом бите кода он не распознает ‘sender’ — извините, что беспокою вас, но почему это?
3. Потому что вам нужно передать параметр. Добавить
(id):sender
означает, что interface builder передаст управление методу при его вызове из interface builder. Когда вы вызываете этот метод самостоятельно, вам нужно будет передать параметр самостоятельно.4. не могли бы вы привести небольшой пример, пожалуйста?