Как я могу убрать клавиатуру, когда я просто коснусь где угодно, кроме UITextField?
Привет
У меня есть два UITextFields в моем приложении и хочу отклонить клавиатуру, когда я просто касаюсь где угодно, кроме UITextFields
как я могу это сделать?
Ответы
Ответ 1
использовать tochesBegin метод для этой цели
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[yourFirstTextField resignFirstResponder];
[yourSecondTextField resignFirstResponder];
}
Вам больше ничего не нужно. Когда вы касаетесь в любом месте на экране, тогда как textField отказывается от необходимости знать, какой из них имеет focus.and, когда вы касаетесь textField, а затем textField открываете клавиатуру по своему усмотрению.
Ответ 2
Ответ Ishu является хорошим. Но я думаю, вы также должны попытаться:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
Ответ 3
Вам нужно создать пользовательскую кнопку в фоновом режиме, а затем подключить ее к методу IBAction
, который вызывает resignFirstResponder
на вашем UITextField
что-то вроде этого
![enter image description here]()
Edit:
поскольку вы хотите добавить кнопку программно, чем вы можете использовать этот код
- (void)viewDidLoad
{
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
button.buttonType = UIButtonTypeCustom;
[button addTarget:self action:(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
[button release];
и после этого добавьте свой код контроллера.
Ответ 4
Создайте невидимую кнопку, поместите ее за UITextField
и отправьте сообщение resignFirstResponder
в текстовые поля при нажатии кнопки.
Ответ 5
Использовать делегат,
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
Вы также можете создать метод в своем контроллере
-(IBAction)editingEnded:(id)sender{
[sender resignFirstResponder];
}
а затем в Connection Inspector в IB подключите к нему событие "Закончено на выходе".
Ответ 6
Обычно в этом случае вы будете иметь вид прокрутки, удерживающий остальную часть пользовательского интерфейса. Если вы назначаете делегат этого представления прокрутки вашему контроллеру представления и говорите, что вы реализуете протокол UIScrollViewDelegate
, то просто добавление следующего метода выполнит задание:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.view endEditing:YES];
}
Ответ 7
Если вы не используете построитель интерфейса, вы можете вручную подключить события, как описано здесь:
Как я могу программно связать UIView или UIImageView с таким событием, как "коснуться внутри" ?
Если вы используете Interface Builder, вам не нужно создавать кнопку фона.
Вы можете сделать это:
- Выберите свой вид (вероятно, называется View)
- Перейдите на вкладку (i) в инспекторе свойств
- Измените класс с UIView на UIControl (это дает вам доступ к событию Touch Down).
- Подключить событие Touch Down к вашему методу backgroundTap (Ctrl + перетащить).
- Не забывайте сохранять изменения.
Ответ 8
You need to define the action for your button click this way
[infoButton addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside];
And implement the click method ,as for example i have provided the animation on button click method.
-(void)backButtonClicked
{
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:YES];
[UIView commitAnimations];
}
Hope this will help you ,the action is without using IB.Its all done through coding
Ответ 9
Используйте это.
- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
const int movementDistance = 180; distace of keyboard up.
const float movementDuration = 0.3f;
int movement = (up ? -movementDistance : movementDistance);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
Ответ 10
Сохраните ссылку на UITextField в контроллере просмотра и вызовите [yourTextField resignFirstResponder]