2016-12-25 54 views
-1

我有一个默认输入为0的UITextField。当用户点击它时,我希望0消失,以便用户可以输入自己的输入。Swift:获取NSException试图检测在UITextField上的点击

这里是我的尝试:

@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的把我带到这个line

class AppDelegate: UIResponder, UIApplicationDelegate { 

我该如何解决这个问题?

+0

更换'选择(( “removeDefaultInput:”))'和'#selector(removeDefaultInput(文本框:))' – par

+0

更好的想法是将故事板中事件的选择器定义为动作 –

回答

1

这是Swift 3吗?如果是的话,那么它的

#selector(removeDefaultInput(_:)) 

和相应的方法是

func removeDefaultInput(_ textField: UITextField) 

但是,为什么你编程添加行动,因为文本字段设计为IB?
更好地使用IBAction,那么你可以在编译时解决问题。

0

还有其他方法可以实现您想要做的事情。

首先是添加一个占位符,默认值为。如果你想检查用户输入的任何东西刚入住

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

OR

如果你想显示最初的一些要求,你可以只覆盖UITextFieldDelegate中的方法让你知道用户是否已经开始编辑。

注:确保你的类符合UITextFieldDelegate

override func viewDidLoad() { 
    super.viewDidLoad() 

    factInput.text = "0" 

    keyboardDownOnTapGesture() 
} 


func textFieldDidBeginEditing(_ textField: UITextField) { 

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

     textField.text = "" 
    } 
}