2017-02-04 28 views
-1

我有三個文本字段可輸入電話號碼。我試圖將每個文本字段的字符限制設置爲三個字符,並且一旦達到此字符切換到新的文本字段。達到字符數限制時切換到下一個UITextField

我在網上看到使用此代碼來限制字符:

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

    let currentCharacterCount = textField.text?.characters.count ?? 0 
    if (range.length + range.location > currentCharacterCount){ 
     return false 
    } 
    let newLength = currentCharacterCount + string.characters.count - range.length 
    return newLength <= 25 
} 

,並用它來切換到輸入一個新的文本框:

.didbecomefirstresponder() 

,但我不知道如何將文本字段限制爲3個字符,然後切換到下一個字段。

回答

1

您可以使用代理方法UITextFieldshouldChangeCharactersInRange。儘管如此,你必須做一些設置工作。以下是一個創建3個textField的示例,符合UITextFieldDelegate,並執行類似於您所描述的操作。

class ViewController: UIViewController, UITextFieldDelegate { 


var max = 3 
var fields:[UITextField] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


    // This is just an example to layout 3 text fields. 
    for i in 0 ..< 3 { 
     let field = UITextField() 
     view.addSubview(field) 
     field.delegate = self 
     field.borderStyle = .roundedRect 
     field.font = UIFont(name: "AvenirNext-Regular", size: 15.0) 
     field.textColor = UIColor.black 
     field.frame = CGRect(x: view.bounds.width/2 - 100, y: 100 + (150*CGFloat(i)), width: 200, height: 50) 
     fields.append(field) 
    } 


} 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    // Make sure the field has non-nil text 
    if let text = textField.text { 
     // Check if the text length has reached max limit 
     if text.characters.count > (max-1) { 
      // Get index of field from fields array 
      if let index = fields.index(of: textField) { 
       // Make sure it's not the last field in the array else return false 
       if index < fields.count-1 { 
        // Make the next field in the array become first responder if it's text is non-nil and it's text's character count is less than desired max 
        if fields[index+1].text != nil && fields[index+1].text!.characters.count < (max-1) { 
         fields[index+1].becomeFirstResponder() 
        } else { 
         return false 
        } 
       } else { 
        return false 
       } 
      } 
     } 
    } 
    return true 
} 

} 
2

這是我的代碼,我該怎麼解決這個問題:

三個文本框是:

@IBOutlet var txtField1: UITextField! 
@IBOutlet var txtField2: UITextField! 
@IBOutlet var txtField3: UITextField! 

進口UITextFieldDelegate到您的類,並設置委託給自己的所有文本框。

並使用此方法更改焦點。

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

    let currentCharacterCount = ((textField.text?.characters.count)! + string.characters.count) - 1 

    switch (textField, currentCharacterCount) { 
    case (self.txtField1, 3): 
     self.txtField2.becomeFirstResponder() 
    case (self.txtField2, 7): 
     self.txtField3.becomeFirstResponder() 
    default: 
     break 
    } 

    return true 
} 

這裏我爲第一個文本字段設置了字符數3,第二個文本字段設置了7。

相關問題