2017-10-31 19 views
-1

私はその画面でOTP画面を作成しています.6つのテキストフィールドを追加しました.1つだけcharecterを入力するように制限したいです&また、特別なcharecters.Belowを入力しないように制限したいです。コード&を見直して何が間違っているか教えてください。制限文字を制限し、特別チャレターを迅速に制限する問題はありますか?

let notAllowedCharacters = "[email protected]#$%^&*()_+{},./[]?:;"; 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool 
    { 
     guard let text = textField.text else { return true } 
     let newLength = text.characters.count + string.characters.count - range.length 
     if newLength <= 1 { 

      return true 
     } 
     else { 
      let set = NSCharacterSet(charactersIn: notAllowedCharacters); 
      let filtered = string.components(separatedBy: set as CharacterSet).joined(separator: "") 
      return filtered == string; 
     } 
    } 

答えて

0

文字の長さをチェックするときは、NSCharacterSetのコントロールを追加する必要があります。それ以外の場合、常に1つの文字がある場合は、文字に関係なく常にtrueになります。コードを次のように更新してください。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool { 
    guard let text = textField.text else { return true } 
    let newLength = text.characters.count + string.characters.count - range.length 

    let set = NSCharacterSet(charactersIn: notAllowedCharacters) 
    if newLength <= 1 && !(string.rangeOfCharacter(from: set as CharacterSet) != nil) { 
     return true 
    } else { 
     return false 
    } 
} 
関連する問題