Ios 拥有2个textField.delagate=self将取消其中一个

Ios 拥有2个textField.delagate=self将取消其中一个,ios,swift,xcode,Ios,Swift,Xcode,因此,我试图使它成为这样,当我点击键盘上的reutrn/done键时,键盘将隐藏,但由于某种原因,当我尝试委派两个文本字段时,每当我点击nameTextField时,它会认为我按下了jobTextField并显示pickerView。有人明白吗 视图控制器代码 import UIKit class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource

因此,我试图使它成为这样,当我点击键盘上的reutrn/done键时,键盘将隐藏,但由于某种原因,当我尝试委派两个文本字段时,每当我点击nameTextField时,它会认为我按下了jobTextField并显示pickerView。有人明白吗

视图控制器代码

import UIKit

class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource {`

    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var jobTextField: UITextField!

    @IBOutlet weak var jobPickerView: UIPickerView!

    @IBAction func setupDoneButton(_ sender: Any) {
        if (nameTextField.text?.isEmpty == false) {
            defaults.set(nameTextField.text, forKey: "name")
            defaults.set(jobTextField.text, forKey: "job")
        }
    }

    let defaults = UserDefaults.standard
    let jobs = ["Real Estate Agent","Retail","Teacher", "Student", "Other"]


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        jobPickerView.isHidden = true;
        jobPickerView.delegate = self
        jobPickerView.dataSource = self
        jobTextField.delegate = self

        nameTextField.delegate = self
        nameTextField.returnKeyType = UIReturnKeyType.done

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prepare (for segue: UIStoryboardSegue, sender: Any!) {
        if (segue.identifier == "setupDoneButtonSegue") {
            let svc = segue.destination as! SecondViewController
            svc.firstDataPassed = nameTextField.text
            svc.secondDataPassed = jobTextField.text
        }
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return jobs.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return jobs[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        jobTextField.isHidden = false;
        jobPickerView.isHidden = true;
        jobTextField.text = jobs[row];
    }

    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        jobTextField.isHidden = true
        jobPickerView.isHidden = false;
        return false
    }

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

在为这两个字段设置
UITextFieldDelegate
时,您需要在
textFieldShouldBeginEditing
中添加条件,这样它将仅为
jobTextField
显示
pickerView

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    jobTextField.isHidden = false
    jobPickerView.isHidden = true
    if jobTextField == textField {
        jobTextField.isHidden = true
        jobPickerView.isHidden = false
        return false
    }
    return true
}

在为这两个字段设置
UITextFieldDelegate
时,您需要在
textFieldShouldBeginEditing
中添加条件,这样它将仅为
jobTextField
显示
pickerView

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    jobTextField.isHidden = false
    jobPickerView.isHidden = true
    if jobTextField == textField {
        jobTextField.isHidden = true
        jobPickerView.isHidden = false
        return false
    }
    return true
}

当在
textField开始编辑时,您需要验证您使用的是什么textField

有一个例子:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

    // Using this is better to add more textFileds later..

    switch textField {
    case jobTextField:
        jobTextField.isHidden = true
        jobPickerView.isHidden = false
        return false
    case nameTextField:
        jobTextField.isHidden = false
        jobPickerView.isHidden = true
        return true
    default:
        // Do something
        return true
    }
}

我希望它能有所帮助。

当输入
文本字段开始编辑时,您需要验证您使用的文本字段

有一个例子:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

    // Using this is better to add more textFileds later..

    switch textField {
    case jobTextField:
        jobTextField.isHidden = true
        jobPickerView.isHidden = false
        return false
    case nameTextField:
        jobTextField.isHidden = false
        jobPickerView.isHidden = true
        return true
    default:
        // Do something
        return true
    }
}

我希望这会有所帮助。

@SkyEnterprises欢迎伴侣:)@SkyEnterprises Rafaela也是对的。默认情况下,您需要隐藏pickerview,如果其名称字段,请检查编辑的answer@SkyEnterprises欢迎伴侣:)@SkyEnterprises Rafaela也是对的。默认情况下,您需要隐藏pickerview,如果其名称字段,请检查编辑的回答答案也有效,但由于上面的评论是第一个,我会将该评论作为答案。没有问题:)你的答案也有效,但由于上面的评论是第一个,我会将该评论作为答案。没有问题:)