2012-04-30 6 views
39

У меня есть несколько текстовых входов, и я могу скрыть клавиатуру всякий раз, когда я касаюсь фона, но только когда я входил в первое текстовое поле nameField1. теперь этот код должен быть простым, но я просто не могу его получить, что я делаю неправильно?hiding keyboard ios

-(IBAction)backgroundTouched:(id)sender { 
[textField1 resignFirstResponder]; 
[buildLength resignFirstResponder]; 
[buildWidth resignFirstResponder]; 
[ridgeWidth resignFirstResponder]; 
[rafterWidth resignFirstResponder]; 
[hipWidth resignFirstResponder]; 
[eaveOverhang resignFirstResponder]; 
[spacing resignFirstResponder]; 

}

+0

Какой объект получения 'backgroundTouched:' действия? Это мнение? Какой-то предмет, который вы оставили за всем? То, как я получил клавиатуру для скрытия на iOS, - это переопределить 'touchhesEnded: withEvent:' ViewController. Он вызывается, когда никакие другие объекты не могут обрабатывать событие касания. Там есть, где я увольняю первого ответчика, хотя вам нужно проверить 'isFirstResponder', потому что, если вы не потребляете прикосновение, вы можете назвать супер. – Russ

+0

Согласитесь с событиями @Russ ... touch на контроллере представления - это более простой способ. Но это все еще загадочно, если оно работает для textField1. Почему не другие? Я предполагаю, что другие дескрипторы не являются хорошими (например, что «buildLength» неправильно инициализируется). – danh

ответ

2

Вы можете попробовать UITouch метод, и в этом множестве текстовый объект поля и вызвать resignFirstResponder когда-либо вы касаетесь на экране клавиатуры будет уйти в отставку, я надеюсь, что это будет работать для вас.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [currentSelectedTextField resignFirstResponder]; 
} 
186

Если вы хотите, чтобы скрыть клавиатуру при нажатии на кнопку, и у вас есть более чем один UITextFields в вашем view, то вы должны использовать:

[self.view endEditing:YES]; 

Нажмите в любом месте на точке зрения, и клавиатура исчезнет.

+0

Я заметил, что в некоторых случаях этот метод работает после некоторой задержки около 0,3 с. Я имею в виду, resignFirstResponder немедленно удаляет клавиатуру. Но этот метод не так и вы должны использовать performSelector после задержки иногда после использования. – wzbozon

6

Вы также можете перебирать массив представлений (например, подзаголовки UIView) и вручную откладывать клавиатуру, это хорошо, если вы не хотите уходить в отставку во всех подвидных объектах вашего родительского UIView.

- (void)viewDidLoad 
{ 
    self.view.userInteractionEnabled = TRUE; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    //Iterate through your subviews, or some other custom array of views 
    for (UIView *view in self.view.subviews) 
     [view resignFirstResponder]; 
} 
27

Попробуйте это:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[self view] endEditing:YES]; 
}