web-dev-qa-db-ja.com

iOS 8で機能しないようになりました

キーボードを表示するためにUITextFieldのメソッドのfirstFirstResponderを使用しています。これはiOS 7で機能しますが、iOS 8ではこのメソッドはキーボードを表示しません。

 UITextField *txtAddNew = [[UITextField alloc] initWithFrame:CGRectMake(10,10,240, 21)];
 txtAddNew.font = [UIFont fontWithName:@"Helvetica" size:16];
 txtAddNew.clearButtonMode = UITextFieldViewModeWhileEditing;
 txtAddNew.returnKeyType = UIReturnKeyDone;
 txtAddNew.delegate = self;
 txtAddNew.autocorrectionType = UITextAutocorrectionTypeNo;
 txtAddNew.tag = 15;

 // Open keyboard
 [txtAddNew becomeFirstResponder];

IOS 8でそれを行う方法はありますか?

19
Tejas Bharambe

以下のようにbecomeFirstResponderを呼び出してみてください

[txtAddNew performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0];

アップルによると、

現在のレスポンダが最初のレスポンダの状態(canResignFirstResponder)に再署名でき、新しいレスポンダが最初のレスポンダになることができる場合にのみ、レスポンダオブジェクトが最初のレスポンダになります。

このメソッドを呼び出して、ビューなどのレスポンダーオブジェクトを最初のレスポンダーにすることができます。ただし、ビュー階層の一部である場合にのみ、そのビューで呼び出す必要があります。ビューのwindowプロパティがUIWindowオブジェクトを保持している場合、それはビュー階層にインストールされています。 nilを返す場合、ビューは任意の階層から切り離されます。

44
thavasidurai

Swift

これはSwift受け入れられた回答の3バージョンです。私がそれを機能させるには、遅延も追加する必要がありました。

txtAddNew.perform(
    #selector(becomeFirstResponder), 
    with: nil, 
    afterDelay: 0.1
)
13
Jacob Arvidsson

addsubviewtxtAddNewMainviewを逃したと思います

   txtAddNew.tag = 15;
   [self.view addsubview:txtAddNew];  

   // Open keyboard
  [txtAddNew becomeFirstResponder];
3
Anbu.Karthik

時々それは最初の最初の応答者を辞任するのに役立ちます:

var tapGesture = UITapGestureRecognizer()
tapGesture.rac_gestureSignal().subscribeNext { [weak self] (_) -> Void in
    self?.inputTextField.resignFirstResponder()
    self?.inputTextField.becomeFirstResponder()
}

self.charViewsContainer.addGestureRecognizer(tapGesture)
1
Antoine

IOS 9.3の場合、次の方法でうまくいきました。

 private var searchTextFieldShouldReturn = false

    override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)

            self.searchTextFieldShouldReturn = false
            self.searchTextField.becomeFirstResponder()
        }
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

        self.searchTextFieldShouldReturn = true
        self.searchTextField.resignFirstResponder()
    }

    func textFieldShouldReturn(textField: UITextField) -> Bool {
            self.searchTextFieldShouldReturn = true
            textField.resignFirstResponder()

            return true
        }

    func textFieldShouldEndEditing(textField: UITextField) -> Bool {

            return self.searchTextFieldShouldReturn
        }

したがって、textFieldShouldEndEditingデリゲートも実装する必要があります。

0
Zoltan Varadi

この行をコードに追加します。私はそれがうまくいくことを願っています

[txtAddNew performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];
0
Sport

他の人が私と同じ問題を抱えている場合に備えて:

IBOutletUITextFieldに接続しました。誤ってviewDidLoadメソッドでこれを初期化していました。あれは、 [[textField alloc] init];。私はこれを削除し、すべてが再び機能しました。

0
espitia

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()
        }
    }
}

これが誰かが同じ問題で立ち往生するのに役立つことを願っています。

0