web-dev-qa-db-ja.com

Swift:UITextFieldの最初のレスポンダーが機能しない

Storyboardに1つのUITextFieldを持つカスタムUIViewControllerを作成しました。 viewDidLoadで、UITextFIeldをbecomeFirstResponderに設定しましたが、何も起こりませんでした(キーボードがポップアップしませんでした)。

次にresignFirstResponder()を呼び出してみましたが、falseを返しました。次に、誰がfirst responderは、@上のコードを使用してすべてのサブビューをループすることです- プライベートAPIを使用せずに現在のファーストレスポンダーを取得します 。どのサブビューも最初のレスポンダーではないことがわかりました。

ストーリーボードのマイViewController

enter image description here

私のコード

class BLTestViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        tf.becomeFirstResponder()
        // Do any additional setup after loading the view.
    }
}

簡単なこと...キーボードが登場しないのはなぜですか?私がしていることの1つは自動レイアウトですが、キーボードのポップアップに影響するかどうかはわかりません。

12
blee908

self.tf.becomeFirstResponder() indside viewDidLoad() functionを呼び出して、テキストフィールドでテストしました。 nflaccoが指摘したようにcommand + Kを押してキーボードを切り替える必要があり、シミュレータでハードウェアキーボードを次のように無効にします。

  1. iOSシミュレーター->ハードウェア->キーボード
  2. 「ハードウェアキーボードの接続」のチェックを外します
19
4aRk Kn1gh7

私のために働いたSwift 4
それを試してみてください

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    DispatchQueue.main.async {
        self.textView.becomeFirstResponder()
    }

}
10

おもう

class BLTestViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        self.focustf()
        // Do any additional setup after loading the view.
    }

    func focustf(){
    self.tf.becomeFirstResponder()
    }
}
5
Hoàng Kiên

Swift 4およびiOS 11

私の場合、私が試したことは重要ではありません。これを試すまで、最初のレスポンダーを設定できませんでした。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if cell.isKind(of: YOURTABLEVIEWCELL.self) {
        if let yourCell = cell as? YOURTABLEVIEWCELL{
            yourCell.yourUiTextField.becomeFirstResponder()
        }
    }
}

これが誰かが同じ問題を抱えているのを助けることを願っています。

3

キーボードを開くにはcommand + shift + kを押します。

0
Talha Ahmed