テキストフィールドがあり、ユーザーがそれを押してカスタムピッカーを表示する必要があります。
ピッカーは正常に表示されますが、問題はキーボードが下部に表示されることであり、私はそれを望んでいません。
これは私が私のiphoneのものから変換しようとしているiPadプロジェクトです。 iPhoneでは、これはうまく機能し、キーボードは常に非表示になっています。
ここで何が欠けている/するのを忘れている可能性がありますか?
将来の参考のために、ここで実際に起こったことは、実際には両方の時間(iphoneとipad)でキーボードがnot隠されていたということでした。下から飛び出していたピッカーがキーボードを上に置いたまま隠していたので、iPhoneに隠されていると思っただけです。しかし、iPadではこれは当てはまりませんでした。
とにかく、以下に提案するデリゲートメソッドを使用して修正しました。
注意、私はこの答えを受け入れました。なぜなら、それは私が望んでいたものであったからです具体的に。残りの答えは正しく、他の実装の方が良いと思います。
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Here You can do additional code or task instead of writing with keyboard
return NO;
}
このデリゲートメソッドは、テキストフィールドにアクセスしたときに最初に呼び出されます。ブール値としてNOを書き込むと、編集を開始したくないため、キーボードが表示されません。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textfield == yourtextField)
{
[textfield resignFirstResponder];
// Show you custom picker here....
return NO;
}
}
そして、コントローラーにuitextfielddelegate
を実装する必要があります。
デリゲートをyourtextField
に割り当てます。
テキストフィールドデリゲートを使用します。
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return NO;
}
これらの答えはすべて、キーボードが表示される前に単に拒否するという1つのアプローチを採用しているようです。これにより、ファーストレスポンダーのステータスが防止され、多くの利点があります。
ファーストレスポンダーのステータスを維持できる簡単な方法の1つは、空のビューを作成し、それを入力フィールドのinputViewプロパティに割り当てることです。 iOS 9(またはそれ以降?)を使用している場合は、inputAssistantItemオブジェクトも削除する必要があります。
UITextField *field = [[UITextField alloc] init];
field.inputView = self.emptyKeyboard.view;
UITextInputAssistantItem *aItem = [field inputAssistantItem];
aItem.leadingBarButtonGroups = @[];
aItem.trailingBarButtonGroups = @[];
次に、代替のView Controllerからフィールドを制御する場合は、ターゲットを追加することで制御できます。
[field addTarget:self.numberPad action:@selector(editingBegan:) forControlEvents:UIControlEventEditingDidBegin];
[field addTarget:self.numberPad action:@selector(editingEnded:) forControlEvents:UIControlEventEditingDidEnd];
[field addTarget:self.numberPad action:@selector(fieldChanged:) forControlEvents:UIControlEventEditingChanged];
UITextFieldをサブクラス化することで、これをよりクリーンに行うこともできます。
TextFieldデリゲートを使用します。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
textField=nil;
return NO;
}
Swift 3.0バージョン
まず、テキストフィールドのデリゲートを設定します
self.textfield.delegate = self
その後、拡張機能で
extension ViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
}
Swift 3/4
追加:-ITextFieldDelegateクラスに。
追加:-self.textField.delegate = self ViewDidLoad内
最後のものはこの関数を追加するだけです-
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Here you can do for Specific text Field by
if (textField==(the text field you don't want to show keyboard)) {
NSLog(@"don't show keyboard");
return NO;
}
else {
return YES;
}
}