как я могу отклонить клавиатуру, когда я просто коснусь где-нибудь, кроме UITextField? - PullRequest
13 голосов
/ 09 февраля 2011

Hello У меня есть два UITextFields в моем приложении, и я хочу отклонить клавиатуру, когда я просто касаюсь где-нибудь, кроме UITextFields как я могу это сделать?

Ответы [ 10 ]

24 голосов
/ 09 февраля 2011

используйте для этого метод tochesBegin

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

  [yourFirstTextField resignFirstResponder];
  [yourSecondTextField resignFirstResponder];
}

Вам больше ничего не нужно. Когда вы дотрагиваетесь до области просмотра, оба текстовых поля подаются в отставку, и вам не нужно знать, какой из них имеет фокус.textField затем textField открыть клавиатуру самостоятельно.

11 голосов
/ 09 февраля 2011

Ответ Ишу хороший.Но я думаю, что вы также должны попробовать:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

  [self.view endEditing:YES];
}
1 голос
/ 26 октября 2015

Как правило, в этом сценарии у вас будет представление прокрутки, содержащее остальную часть пользовательского интерфейса. Если вы назначите делегата этого представления прокрутки вашему контроллеру представления и скажете, что реализуете протокол UIScrollViewDelegate, то просто добавьте следующий метод, который сделает эту работу:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.view endEditing:YES];
}
1 голос
/ 09 февраля 2011

Использовать делегата,

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
 [textField resignFirstResponder];
 return YES;
}

Вы также можете создать метод в вашем контроллере

 -(IBAction)editingEnded:(id)sender{
    [sender resignFirstResponder]; 
}

, а затем в Инспекторе подключений в IB подключить к нему событие «Закончилось ли при выходе».

1 голос
/ 09 февраля 2011

Создайте невидимую кнопку, поместите ее за UITextField и отправьте сообщение resignFirstResponder в текстовые поля при нажатии кнопки.

1 голос
/ 09 февраля 2011

Вам нужно создать пользовательскую кнопку в фоновом режиме, а затем подключить ее к методу 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];

и затем добавьте код контроллера.

0 голосов
/ 25 июля 2014

Используйте это.

- (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];
}
0 голосов
/ 09 февраля 2011
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
0 голосов
/ 09 февраля 2011

Если вы не используете Интерфейсный конструктор, вы можете вручную подключить события, как описано здесь: Как программно связать UIView или UIImageView с таким событием, как "touch up inside"?

Если вы используете Интерфейсный конструктор, вам не нужно создавать фоновую кнопку.

Вы можете сделать это:

  1. Выберите вид (вероятно, называется Вид)
  2. Перейдите на вкладку (i) в инспекторе свойств
  3. Измените класс с UIView на UIControl (это дает вам доступ к событию Touch Down ).
  4. Подключите событие Touch Down к своему методу backgroundTap (Ctrl + перетаскивание).
  5. Не забудьте сохранить изменения
0 голосов
/ 09 февраля 2011

Сохраните ссылку на UITextField в вашем контроллере представления и вызовите [yourTextField resignFirstResponder]

...