我在View Controller中有两个UITextView。每个文本的最大长度文本必须是4个字符。 当我在第一个文本字段中放入4个字符时,我必须转到第二个文本视图, 当我在第二个文本视图中放入4个字符时,我必须运行一些函数。
我使用shouldChangeCharactersInRange
的{{1}}:
UITextFieldDelegate
但是现在我遇到了一个问题:当我在第一个文本字段中有4个字符时,我按下了5英尺,然后运行此委托函数。
答案 0 :(得分:2)
我不明白你的意思,但是你需要使用" ==="来检查对象本身的引用,而不是值,因为你可以拥有相同的两个文本字段中的文本(以及文本字段具有的其他属性)。" =="检查值。
另外,请确保两个文本字段都具有委托集
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField === firstText{
var text = firstText.text as NSString
if (text.length == 4){
secondText.becomeFirstResponder()
}
}
if textField === secondText{
var text = secondText.text as NSString
if (text.length == 4){
seccessAction()
}
}
return true;
}
答案 1 :(得分:0)
您正在使用shouldChangeCharactersInRange:
,询问是否应更新字符串中的文字。因此,该文本尚未更新。找到包含这些新字符的新字符串,然后检查它的长度。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
var newString = textField.text.stringByReplacingCharactersInRange(range.toRange(textField.text), withString: string) as NString
if (textField == firstText){
if newString.length == 4 {
secondText.becomeFirstResponder()
}
}
if (textField == secondText){
if newString.length == 4{
successAction()
}
}
return true
}
extension NSRange {
func toRange(string: String) -> Range<String.Index> {
let startIndex = advance(string.startIndex, location)
let endIndex = advance(startIndex, length)
return startIndex..<endIndex
}
}