使登录屏幕类似于锁定屏幕

时间:2015-04-02 06:11:32

标签: ios swift uitextfield

我尝试使用4个textField创建一个类似于锁定屏幕的登录屏幕。 我面临的问题是将焦点从一个文本字段更改为下一个文本字段。

  • 当我说secondTextField.becomeFirstResponder()时,firstTextField的值被复制到secondTextField
  • 我使用小数点键盘 - 键盘类型

以下是我到目前为止所做的工作,我无法找到解决问题的方法:

  • 使用UITextFieldDelegate
  • 为所有textField
  • 建立了IBOutlet连接
  • firstText.delegate = self secondText.delegate = self thirdText.delegate = self firstText.becomeFirstResponder()
  • func textField(textField:UITextField,shouldChangeCharactersInRange range:NSRange,replacementString string:String) - >布尔{     var newLength = countElements(textField.text)+ countElements(string) - range.length

        if newLength == 1 {
            if textField == firstText{
                changeFocus(textField)
            }else if textField == secondText {
                changeFocus(textField)
            }else if textField == thirdText {
                changeFocus(textField)
            }
    
        }
    return newLength <= 1
    

    }

    func changeFocus(nextFocus:UITextField){

    if nextFocus == firstText {
        firstText.resignFirstResponder()
        secondText.becomeFirstResponder()
    } else if nextFocus == secondText {
        secondText.resignFirstResponder()
        thirdText.becomeFirstResponder()
    } else if nextFocus == thirdText {
        thirdText.resignFirstResponder()
    }
    

    }

如何正确地做到这一点,请提供任何帮助和建议。

4 个答案:

答案 0 :(得分:0)

使用此委托方法更改焦点

func textFieldShouldReturn(textField: UITextField) -> Bool

答案 1 :(得分:0)

svrushal 回复添加更多内容:

func textFieldShouldReturn(textField: UITextField) -> Bool {
   if textField == firstText {
       secondText.becomeFirstResponder()
   }

   if textField == secondText {
       thirdText.becomeFirstResponder()
   }

   if textField == thirdText {
       fourthText.becomeFirstResponder()
   }

}

答案 2 :(得分:0)

答案 3 :(得分:0)

我在这里发现了类似的内容:similar

有了它的工作,有两个限制:

  • 首先,我不能向后删除
  • 其次,如果passCode错误,用户必须点击第一个textField。 但是现在这些还不错。
  • 以下是方法

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
    var shouldProcess = false
    var moveToNextTextField = false
    var insertStringLength = countElements(string)
    if insertStringLength == 0 {
        shouldProcess = true
    }
    else {
        if countElements(textField.text) == 0 {
            shouldProcess = true
        }
    }
    if shouldProcess {
       var myString = textField.text
        if countElements(myString) == 0{
            myString = myString + string
    
            password = password + myString
            moveToNextTextField = true
        }
        textField.text = myString
    
        if moveToNextTextField {
            changeFocus(textField)
        }
    }
    return false
    }
    
  • 更改焦点的方法:

    func changeFocus(nextTextField : UITextField){
    if  nextTextField == firstText {
        firstText.resignFirstResponder()
        secondText.becomeFirstResponder()
    } else if nextTextField == secondText {
        secondText.resignFirstResponder()
        thirdText.becomeFirstResponder()
    } else if nextTextField == thirdText {
        thirdText.resignFirstResponder()
        fourthText.becomeFirstResponder()
    } else if nextTextField == fourthText {
        fourthText.resignFirstResponder()
    }
    

    }

  • 检查引脚/密码的方法:

    func textFieldShouldEndEditing(textField: UITextField) -> Bool {
    if textField == fourthText {
       thirdText.resignFirstResponder()
        let pass = defaultUser.stringForKey(Admin)
        println("password = \(password)")
        if pass  == password {
    
            println("the password is correct")
            dispatch_async(dispatch_get_main_queue()) { () -> Void in
                self.performSegueWithIdentifier("SegueToSecond", sender: self)
            }
    
        } else {
            println("wrong password")
            thirdText.text = ""
            secondText.text = ""
            firstText.text = ""
            fourthText.text = ""
            password = ""
            view.reloadInputViews()
        }
    
    }
    
    return true
    }
    

希望这些人稍后会帮助他们。