Как я могу отклонить клавиатуру, когда я просто коснусь где-нибудь, кроме UITextField?

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

10 ответов

Решение

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

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

  [yourFirstTextField resignFirstResponder];
  [yourSecondTextField resignFirstResponder];
}

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

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

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

  [self.view endEditing:YES];
}

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

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.view endEditing:YES];
}

Вам нужно создать пользовательскую кнопку на фоне, а затем подключить ее к IBAction метод, который вызывает resignFirstResponder на вашем UITextField

что-то вроде этого

Редактировать:

как вы хотите добавить кнопку программно, чем вы можете использовать этот код

- (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];

и затем добавьте свой код контроллера после этого.

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

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

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

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

а затем в инспекторе подключений в IB подключите к нему событие "Did End On Exit".

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

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

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

Вы могли бы сделать это:

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

Использовать этот.

- (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];
}
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

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

Другие вопросы по тегам