web-dev-qa-db-ja.com

SwiftすべてのuiTextfieldで最初のレスポンダーを辞任する方法

すべてのuitextfieldで最初のレスポンダーの辞任を使用したいと思います。 uitextfieldsを配列に配置することでこれを完了できますが、配列の使用を避けたいと思いました。辞任は、すべてのタイプのuiTextFieldに対して、どのようにこれを行うことができるかで発生するはずです。

これはうまくいきます

    class ViewController: UIViewController, UITextFieldDelegate {
        @IBOutlet weak var text: UITextField!
        @IBOutlet weak var textFieldtwo: UITextField!

        var textField = [UITextField]()

        override func viewDidLoad() {
            super.viewDidLoad()
            self.textField = [text,textFieldtwo]

            for item in textField {
                item.delegate = self
            }
        }

        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            print("text")

            for item in textField {
                item.resignFirstResponder()
            } 
        }
    }
20
pprevalon

これを試すことができます:

for textField in self.view.subviews where textField is UITextField {
    textField.resignFirstResponder()
}

しかし、単にキーボードを閉じるreturnkeyboardを押すか、touchesBeganを使用せずに画面上の任意の場所をタップする場合

これで試すことができます:

// For pressing return on the keyboard to dismiss keyboard
func textFieldShouldReturn(textField: UITextField) -> Bool {
    for textField in self.view.subviews where textField is UITextField {
        textField.resignFirstResponder()
    }
    return true
}

...

func hideKeyboard() {
    view.endEditing(true)
}

そして、これをviewDidLoadに追加します:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))
view.addGestureRecognizer(tapGesture)
20
Khuong

または、よりグローバルなアプローチを使用してください。 (Swift 3.0)

UIApplication.shared.sendAction(#selector(UIApplication.resignFirstResponder), to: nil, from: nil, for: nil);

これにより、現在のファーストレスポンダーが辞任するため、アクティブなフィールドはすべて破棄されます。幸運のコーディング!

26
Hjalmar

より簡単なアプローチは、次のように言って、UITextFieldsを含むUIViewで編集を終了することです。

view.endEditing(true)
15
Ahmed Onawale

今Swift 3で、最も簡単な方法は

方法1:「戻る」キーが押されたときに呼び出されます。

func textFieldShouldReturn(_ textField: UITextField) -> Bool 
 {
 textField1.resignFirstResponder()
 textField2.resignFirstResponder()
        return true;
    }

方法2:「戻る」キーが押されたときに呼び出されます。

func textFieldShouldReturn(_ textField: UITextField) -> Bool 
    {
    self.view.endEditing(true)
        return true;
    }

方法3:グローバルメソッド書き込みビューがロードされました

self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))

注:これを追加することを忘れないでください。それ以外の場合は機能しません。

UIGestureRecognizerDelegate, UITextFieldDelegate

私はそれがあなたのために働くことを願っています:)

3
Anup Gupta

resignFirstResponderとツールバーボタンSwift4 ##

これを試すことができます:1. Textfield Delegateをチェック
class CoursesViewController: UIViewController,UITextFieldDelegate {

  1. TextField変数を作成:var currentTextField:UITextField!

  2. TextFieldに「完了」ボタンと「キャンセル」ボタンツールバーを作成

    func addDoneCancel(_ textField : UITextField) {
    
        curentTextField = textField
    
        // ToolBar
        let toolBar = UIToolbar()
        toolBar.barStyle = .default
        toolBar.isTranslucent = true
        toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
        toolBar.sizeToFit()
    
        // Adding Button ToolBar
        let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(CoursesViewController.doneClick))
        let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
        let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(CoursesViewController.cancelClick))
        toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
        toolBar.isUserInteractionEnabled = true
        textField.inputAccessoryView = toolBar
    }
    

4 .ツールバーボタンのアクション

@objc func doneClick(){
    curentTextField.resignFirstResponder()
}

@objc func cancelClick(){
    curentTextField.resignFirstResponder()
}

5 .ItextFieldデリゲート

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    curentTextField = textField
    addDoneCancel(textField)
    return true
}

func textFieldDidBeginEditing(_ textField: UITextField) {    
    //delegate method
}

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {  
    //delegate method
    return true
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {   
    //delegate method
    textField.resignFirstResponder()

    return true
}
0
Braham Youssef