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