Ios 使登录屏幕类似于锁定屏幕
我试图使一个登录屏幕类似于锁定屏幕4文本字段。 我面临的问题是将焦点从一个文本字段更改为下一个文本字段Ios 使登录屏幕类似于锁定屏幕,ios,swift,uitextfield,Ios,Swift,Uitextfield,我试图使一个登录屏幕类似于锁定屏幕4文本字段。 我面临的问题是将焦点从一个文本字段更改为下一个文本字段 当我说secondTextField.becomeFirstResponder()时,firstTextField的值被复制到secondTextField 我用的是十进制键盘 以下是我迄今为止所做的工作,我无法找到解决问题的方法: 使用UITextFieldDelegate 为所有文本字段建立IBOutlet连接 firstText.delegate=self secondText.d
- 当我说
时,firstTextField的值被复制到secondTextFieldsecondTextField.becomeFirstResponder()
- 我用的是十进制键盘
- 使用UITextFieldDelegate
- 为所有文本字段建立IBOutlet连接
firstText.delegate=self secondText.delegate=self thirdText.delegate=self firstText.becomeFirstResponder()
- func textField(textField:UITextField,shouldChangeCharactersRange:NSRange,replacementString:string)->Bool{
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 textFieldShouldReturn(textField: UITextField) -> Bool
要为svrushal添加更多内容,请回答:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == firstText {
secondText.becomeFirstResponder()
}
if textField == secondText {
thirdText.becomeFirstResponder()
}
if textField == thirdText {
fourthText.becomeFirstResponder()
}
}
你可以参考这个链接
它会帮你的。我在这里找到了类似的东西: 让它工作起来,有两个限制:
- 首先,我不能向后删除
- 其次,如果密码错误,用户必须点击第一个文本字段。 但现在这些已经足够好了
- 以下是方法
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() }
- 检查pin/密码的方法:
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 }
希望这些对以后的人有所帮助。十进制键盘没有返回或完成按钮,因此委托方法永远不会被调用。我也尝试过textFieldShouldEndEditing方法。如果是,请尝试检查以下链接:。你需要在键盘上加一个返回键来满足你的需求。有没有办法不用返回键呢?我真的很想让ui保持默认,所以我不需要改变键盘。要做到这一点,你需要一个额外的按钮。我建议你可以在UI的背景中添加一个按钮。你可以用它来改变焦点。否则,用数字和标点符号键盘代替数字键盘。限制其他符号。它有返回按钮我尝试过这个,但是委托方法从未被调用,就像我说的我使用的是十进制键盘,所以我不确定这个方法在这里是否有效。哦,好的!很抱歉,我并没有注意到,若我可以在并没有库的情况下完成这些,那个么这将是一件好事。对于找到这个答案的任何人来说,你们可以通过将
shouldChangeCharactersInRange
的的return false
替换为return(count(myString)-range.length<1)
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
}