Как я могу убрать клавиатуру, когда я просто коснусь где угодно, кроме 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]