2015-08-09 52 views
2

使用解決方案更新了代碼。shouldChangeCharactersInRange多個文本字段被凍結

這適用於你想要的許多領域。

它還修復了當方法返回false時textfield凍結問題。

行波紋管指示返回false後返回true的方法。

newString = currentString.stringByReplacingCharactersInRange(range, withString: string) 

在視圖沒有負載(這將標識符添加到每個字段中,以便可以什麼領域正在被使用的方法中鑑定 - 它是一個Int())

emailAddressField.tag = 1 
    userPasswordField.tag = 2 

在委託方法

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    var maxLength = Int() 
    var newString = NSString() 
    var currentString = NSString() 

    println("MY TAG \(textField.tag)") 

    switch textField.tag { 

    case 1: 
     println("CASE 1 \(range)") 

     maxLength = 16 
     currentString = emailAddressField.text 
     newString = currentString.stringByReplacingCharactersInRange(range, withString: string) 

    case 2: 
     println("CASE 2 \(range)") 

     maxLength = 8 
     currentString = userPasswordField.text 
     newString = currentString.stringByReplacingCharactersInRange(range, withString: string) 

    default: 
     println("Didn't detect any field") 

    } 
    return newString.length <= maxLength 

} 

回答

2

的問題是,委託方法shouldChangeCharactersInRange被儘快用於這兩個文本字段,並在您實現您傳回false作爲文本網絡之一現場達到了極限,最終使兩個文本字段都拒絕進一步的輸入。要解決此問題,您需要檢查方法的textField參數以確定調用方法的哪個文本字段。

其中一個可能的方式來做到這一點是建立標籤上的兩個文本字段,例如在viewDidLoad

override func viewDidLoad() { 
    ... 
    emailAddressField.tag = EMAIL_ADDRESS_TEXTFIELD // e.g. 0 
    userPasswordField.tag = USER_PASSWORD_TEXTFIELD // e.g. 1 
} 

,然後在文本字段中提供給委託方法的標籤作用

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    let newString = textField.text!.stringByReplacingCharactersInRange(range, withString: string) 

    if textField.tag == EMAIL_ADDRESS_TEXTFIELD && count(newString) + 1 == 30 { 
     return false 
    } 

    if textField.tag == USER_PASSWORD_TEXTFIELD && count(newString) + 1 == 11 { 
     return false 
    } 

    return true 
} 
+0

Thanks dude。這工作來標記字段。我仍然有凍結的問題。用我找到的所有解決方案更新了我的問題。現在它工作正常。希望它能幫助別人。我認爲標記之後也會更容易實現字符類型驗證。所以,謝謝你。 – GuiSoySauce

+0

@GuiSoySauce很好!我相應地更新了我的答案。 – hennes