Swift:尝试检测UITextField上的点击时获取NSException

时间:2016-12-25 17:48:29

标签: ios swift

我有一个默认输入为0的UITextField。当用户点击它时,我希望0消失,这样用户就可以输入自己的输入。

这是我的尝试:

@IBOutlet weak var factInput: UITextField!

func removeDefaultInput(textField: UITextField) -> Void {
    factInput.text = ""
}

override func viewDidLoad() {
    super.viewDidLoad()

    factInput.text = "0"

    factInput.addTarget(self, action: Selector(("removeDefaultInput:")), for: UIControlEvents.editingDidBegin)


    keyboardDownOnTapGesture()
}

然而,当我点击UITextField时应用程序崩溃,这是我得到的错误:

libc++abi.dylib: terminating with uncaught exception of type NSException

XCode带我到这一行

class AppDelegate: UIResponder, UIApplicationDelegate {

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这是Swift 3吗?如果是,那就是

#selector(removeDefaultInput(_:))

并且相应的方法是

func removeDefaultInput(_ textField: UITextField)

但是为什么要以编程方式添加动作,因为文本字段是在IB中设计的? 最好使用IBAction,然后就可以在编译时解决问题。

答案 1 :(得分:0)

还有其他方法可以实现您的目标。

首先是添加占位符,默认情况下其值为 0 。如果你想检查用户是否输入了任何东西,只需检查 -

if(factInput.text == ""){
     //no text added by user and just pass 0 value instead
}

如果您想最初显示 0 以满足某些要求,您可以覆盖UITextFieldDelegate方法,让您知道用户是否已开始编辑。

注意:确保您的班级符合UITextFieldDelegate

override func viewDidLoad() {
    super.viewDidLoad()

    factInput.text = "0"

    keyboardDownOnTapGesture()
}


func textFieldDidBeginEditing(_ textField: UITextField) {

    if(textField.text == "0"){

        textField.text = ""
    }
}