Swift我有四个文本字段和一个提交按钮,如果所有文本字段都有一个字符串,我怎样才能激活该按钮

时间:2014-11-19 23:29:02

标签: swift uibutton ios8 uitextfield

我的代码存在的问题是用户必须点击即可 从第四个字段到另一个字段的提交按钮 再次变得活跃我是stackoverflow的新手,也是swift编程语言的新手,我们将非常感谢任何帮助。

@IBOutlet weak var enterPlayer1: UITextField!
@IBOutlet weak var enterPlayer2: UITextField!
@IBOutlet weak var enterPlayer3: UITextField!
@IBOutlet weak var enterPlayer4: UITextField!

@IBOutlet weak var submit: UIButton!


func textFieldDidBeginEditing(textField: UITextField) -> Bool 
{       
     if enterPlayer1.text != "" && enterPlayer2.text != "" && enterPlayer3.text != "" && enterPlayer4.text != "" 
     {    
         submit.enabled = true
     } else {
         submit.enabled = false
     }

     return true         
 }


override func viewDidLoad() {
    super.viewDidLoad()

    enterPlayer1.delegate = self
    enterPlayer2.delegate = self
    enterPlayer3.delegate = self
    enterPlayer4.delegate = self

    submit.enabled = false

    //submit.enabled = false
    // Do any additional setup after loading the view.
}

3 个答案:

答案 0 :(得分:3)

我们需要在文本完成更改后查看文本字段。 UITextFieldDelegate方法实际上没有一个回调给代表,例如" didChangeCharacters"。

相反,我们可以为此创建IBAction

enter image description here

右键单击其中一个文本字段以获取屏幕截图中的弹出菜单。单击并拖动"编辑已更改"圈入您的视图控制器类以创建方法。

现在,您可以从其他文本字段的相同位置单击并拖动,但与其他文本字段相同,而不是创建新方法,将它们挂钩到此方法中。

当你把所有东西都搞定之后,你的网点可能会是这样的:

enter image description here

最重要的是,这里看到所有四个文本字段都挂在了Received Actions中。我打电话给我的方法" textChanged"对于这个例子。

现在,只需编写验证码即可。在这种情况下,以下" textChanged"方法会起作用:

@IBAction func textChanged(sender: UITextField) {
    self.button.enabled = self.field1.text != "" && self.field2.text != "" 
        && self.field3.text != "" && self.field4.text != ""
}

虽然严格地说,由于UITextField的{​​{1}}属性可以是text,因此确切的验证会崩溃。

答案 1 :(得分:1)

我宁愿把它放到这样的动作中:

@IBAction func loginPressed(){
if(enterPlayer1.text == "" ){
    myBool = NO
}
if(enterPlayer2.text == ""){
    myBool = NO
}
if(enterPlayer3.text == "" ){
    myBool = NO
}
if(enterPlayer4.text == ""){
    myBool = NO
}

if (myBool){
    //Rest of code here
}

}

答案 2 :(得分:0)

尝试覆盖以下UITextViewDelegate方法

optional func textField(_ textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool" UITextFieldDelegate method instead:

基本上,

override func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> BOOL
{
    if enterPlayer1.text != "" && enterPlayer2.text != "" 
       && enterPlayer3.text != "" && enterPlayer4.text != "" 
    {        
        submit.enabled = true
    } 
    else 
    {
        submit.enabled = false
    }

    return true
}