设置委托人时发生无效的选择器错误:Xcode 10 swift 4

时间:2019-03-26 12:57:52

标签: ios uitextfield swift4 xcode10

应用程序在我设置TextField委托的行上崩溃:

listNameTextField = self

viewDidLoad方法中

出现错误

'NSInvalidArgumentException', reason: '-[UIView setDelegate:]: unrecognized selector sent to instance

我已经尝试在listNameTextField引用上使用strong变量weak,但是它并不能解决问题

import UIKit

class CreateListViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var listNameTextField: UITextField!
    var listNameString: String = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Create List"
        listNameTextField.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func submitListName(_ sender: UIButton) {
        if listNameString != "" {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "ListView")
            self.present(controller, animated: true, completion: nil)
        }
    }

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

        textField.resignFirstResponder()
        return true
    }

    func textFieldDidEndEditing(_ textField: UITextField) {

        if let text = listNameTextField.text {
            listNameString = text
        }
    }
}

1 个答案:

答案 0 :(得分:0)

根据您的错误,您的listNameTextField就是UIView
检查您的xib / storyboard中的连接。

您无法将情节提要中的UIView的类型更改为UITextField,因为情节提要在xml中为UITextField生成了其他属性。

相反,您需要从情节提要中删除原始的UIView,并添加新的UITextField并建立新的连接。