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];
}
それだけです。 非表示のボタンの下にあるコントロールが使用できなくなり、キーボードを削除するために一度押す必要があり、その後コントロールをクリックできるため、ソリューションは最適ではない場合があります。 しかし、実装は簡単で、私の意見では非常にユーザーフレンドリーです。
Source: https://habr.com/ru/post/J100498/
All Articles