制作类似于锁定屏幕的登录屏幕
我试图制作类似于具有4个textField的锁定屏幕的登录屏幕。 我面临的问题是将焦点从一个文本字段更改为下一个。制作类似于锁定屏幕的登录屏幕
- 当我说
secondTextField.becomeFirstResponder()
的firstTextField的值被复制到secondTextField - 我使用的是十进制垫 - 键盘类型
这是我到目前为止,我做无法找到解决办法来解决这个问题:
- 使用UITextFieldDelegate
- IBOutlet中取得连接对所有文本字段
firstText.delegate = self secondText.delegate = self thirdText.delegate = self firstText.becomeFirstResponder()
-
FUNC文本字段(文本框:的UITextField,shouldChangeCharactersInRange范围:NSRange,replacementString字符串:字符串) - >布尔{ 变种newLength = countElements(的TextField.text)+ countElements(字符串) - 范围。长度
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() }
}
我怎样才能做到这一点正确,任何帮助和建议,请。
我发现类似的东西在这里:similar
得到它的工作,有两个限制:
- 首先,我不能向后删除
- 其次,用户必须点击第一个文本框如果passCode错误。 但现在这些已经够好了。
-
这里是方法
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 }
希望这些帮助稍后一些。
对于那些找到这个答案的人,你可以通过用'return(count(myString) - range.length')替换'shouldChangeCharactersInRange'的'return false'来处理不能删除的问题。 1)' – user3498976 2015-07-21 18:53:52
使用该委托方法来改变焦点
func textFieldShouldReturn(textField: UITextField) -> Bool
十进制小面板没有返回或完成按钮,因此委托方法永远不会被调用。我也尝试过使用textFieldShouldEndEditing方法。 – 2015-04-02 06:21:52
如果是这样,然后尝试检查下面的链接:http://*.com/questions/26031798/how-to-get-keyboard-location-in-ios-8-add-done-button-on-numberpad。你需要添加返回按钮到你的愿望要求的键盘 – svrushal 2015-04-02 06:32:36
有没有什么办法,我不必使用返回按钮?真的想保持ui默认,所以我不必改变键盘。 – 2015-04-02 06:37:51
要添加更多一点svrushal答案:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == firstText {
secondText.becomeFirstResponder()
}
if textField == secondText {
thirdText.becomeFirstResponder()
}
if textField == thirdText {
fourthText.becomeFirstResponder()
}
}
已经尝试过,但委托方法永远不会被调用,就像我说我正在使用一个小数点,所以我不确定这个方法在这里。 – 2015-04-02 06:24:34
哦,好的!对不起,我没有注意到 – 2015-04-02 06:30:08
使用此https://github.com/kylef/BSKeyboardControls – Kalpesh 2015-04-02 06:30:13
如果我可以在没有图书馆的情况下做到这一点,那将会很棒。 – 2015-04-02 06:33:16