web-dev-qa-db-ja.com

iOSのテキストフィールドを押したときに表示されるキーボードを無効にするにはどうすればよいですか?

テキストフィールドがあり、ユーザーがそれを押してカスタムピッカーを表示する必要があります。

ピッカーは正常に表示されますが、問題はキーボードが下部に表示されることであり、私はそれを望んでいません。

これは私が私のiphoneのものから変換しようとしているiPadプロジェクトです。 iPhoneでは、これはうまく機能し、キーボードは常に非表示になっています。

ここで何が欠けている/するのを忘れている可能性がありますか?

編集


将来の参考のために、ここで実際に起こったことは、実際には両方の時間(iphoneとipad)でキーボードがnot隠されていたということでした。下から飛び出していたピッカーがキーボードを上に置いたまま隠していたので、iPhoneに隠されていると思っただけです。しかし、iPadではこれは当てはまりませんでした。

とにかく、以下に提案するデリゲートメソッドを使用して修正しました。

注意、私はこの答えを受け入れました。なぜなら、それは私が望んでいたものであったからです具体的に。残りの答えは正しく、他の実装の方が良いと思います。

13
user1498477
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // Here You can do additional code or task instead of writing with keyboard
    return NO;
}

このデリゲートメソッドは、テキストフィールドにアクセスしたときに最初に呼び出されます。ブール値としてNOを書き込むと、編集を開始したくないため、キーボードが表示されません。

32
Maheta Dhaval K
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    if(textfield == yourtextField)
    {
        [textfield resignFirstResponder];
        // Show you custom picker here....
        return NO;
    }     
}

そして、コントローラーにuitextfielddelegateを実装する必要があります。

デリゲートをyourtextFieldに割り当てます。

8
V.J.

テキストフィールドデリゲートを使用します。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{        
    return NO;
}
6
AllianceTek

これらの答えはすべて、キーボードが表示される前に単に拒否するという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をサブクラス化することで、これをよりクリーンに行うこともできます。

3
Chuck Wolber

TextFieldデリゲートを使用します。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
 textField=nil;
 return NO;
}
1
Praveen

Swift 3.0バージョン

まず、テキストフィールドのデリゲートを設定します

self.textfield.delegate = self

その後、拡張機能で

extension ViewController: UITextFieldDelegate {
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return false
    }
}
1
Fangming

Swift 3/4

  1. 追加:-ITextFieldDelegateクラスに。

  2. 追加:-self.textField.delegate = self ViewDidLoad内

  3. 最後のものはこの関数を追加するだけです-

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        return false
    }
    
0
RAHUL NIMJE
-(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;
    }
}
0