UITextFieldおよびテンキーパッドの非表示

iPhone / iPadでテンキーを非表示にする方法についてお話したいと思います。



ご存知のように、UITextFieldがフォーカスを受け取ると、タイプに応じて英数字または数字のキーボードが表示されます。 このキーボードを非表示にするには、[完了]ボタンをクリックします(さまざまなタイプとラベルがあり、設定可能)。または、メソッドを呼び出します: [textField resignFirstResponder]



、したがって、このメソッドを呼び出すことによってのみキーボードを削除できます。 iOS 3.2および4.0がリリースされる前は、ボタンをこの場所に追加することで解決しました(メソッドは汚れていますが、機能し、誰もが満足していました): neoos

しかし、これらのシステムのリリース後、メソッドは機能しなくなりました。 この方法には別のハックが登場しましたが、私の謙虚な意見では、その価値はありません。



そのため、私はこの方法で多数のリンクを分割することにしました。ユーザーにキーボード以外の場所をクリックさせると、非常に直感的にキーボードが消えます。 キーボードがない場所にたくさんのコントロールがあるので、イベントにサインアップするようにそれらの1つに指示することはオプションではないため、すべての上に透明なボタンを表示し、UIControlEventTouchDownイベントによってキーボードを非表示にすることにしました。 キーボードが表示されたときにのみボタンを表示し、ボタンをクリックしたときにキーボードを非表示にしてボタンを破棄することは価値があります。 これを次のように実装しました。



ヘッダーファイル(これは覚えて後で破棄できるようにするためです):

UIButton* btnInvisible;







ここでは、キーボードが表示される瞬間をキャッチできるように、クラスにUITextFieldDelegateプロトコルに署名する必要もあります。 何らかの理由で、UITextFieldイベントの標準サブスクリプションが機能しません。 インターフェイスビルダーでは、UITextFieldを指定する必要があります。そのデリゲートがコントローラークラスであるか、イベントの処理を担当するUITextFieldを指定します。



実装ファイル:

#pragma mark -

#pragma mark UITextField delegate

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

{

//Create button

btnInvisible = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 240)];

[btnInvisible addTarget:self action:@selector(hideKeyboard) forControlEvents:UIControlEventTouchDown];



//Show over the window view, which is at index 0 (usually)

CorreasAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

[appDelegate.window insertSubview:btnInvisible atIndex:1];



return YES;

}



- (void)hideKeyboard

{

//Hide keyboard

[quantityField resignFirstResponder];



//Hide and release button

[btnInvisible removeFromSuperview];

[btnInvisible release];

}







それだけです。 非表示のボタンの下にあるコントロールが使用できなくなり、キーボードを削除するために一度押す必要があり、その後コントロールをクリックできるため、ソリューションは最適ではない場合があります。 しかし、実装は簡単で、私の意見では非常にユーザーフレンドリーです。



All Articles