2012-04-30 13 views
39

私はいくつかのテキスト入力を持っています。最初のテキストボックス名textField1に入力したときにのみ、キーボードを背景に触れるたびに非表示にできます。今このコードはシンプルなはずですが、私はちょうどそれを得るように見える、何が間違っているのですか?キーボードのiosを隠す

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

}

+0

'backgroundTouched受信しているどのようなオブジェクト:'アクションを?それは眺めですか?あなたはすべての事の後ろに置くいくつかのオブジェクト? iOS上で非表示にするキーボードがあるのは、ViewControllerの 'touchesEnded:withEvent:'をオーバーライドすることです。他のオブジェクトがタッチイベントを処理できないときに呼び出されます。最初のレスポンダーを辞任する場所がありますが、あなたがsuperを呼び出すと思われるタッチを消費しないので、 'isFirstResponder'をチェックする必要があります。 – Russ

+0

@Russと合意... View Controllerのタッチイベントは、より簡単な方法です。しかし、それがtextField1で動作するのはまだ不思議です。なぜ他の人はいないの?私の推測では、他のハンドルは良くない(例えば、 'buildLength'が正しく初期化されていないなど) – danh

答えて

2

あなたはUITouch方法を試してみて、この中にあなたのテキストフィールドオブジェクトを設定し、私はこれがあなたのために働くことを願って、あなたが画面上に触れ、これまでキーボードが辞任することになったときresignFirstResponder を呼び出すことができます。

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

あなたがボタンをタップすると、キーボードを非表示にすると、あなたのviewに複数のUITextFieldsを持っている場合は、あなたが使用する必要があります。

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