2014-11-27 4 views
5

Sto creando un sistema di accesso e non voglio che gli spazi siano consentiti nel campo del nome utente. Invece di controllare e convalidare il campo, voglio impedire l'aggiunta di spazi.Come posso disabilitare il tasto "Spazio" sulla tastiera in Swift?

Quindi, ogni volta che l'utente preme la barra spaziatrice, non dovrebbe accadere nulla. Come lo posso fare? Ho visto Instagram farlo.

Questo è il mio codice finora:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var signUp: UIBarButtonItem! 
    @IBOutlet weak var navBar: UINavigationBar! 
    @IBOutlet weak var UsernameText: UITextField! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

      self.navigationController?.navigationBar.clipsToBounds = true 
     UsernameText.attributedPlaceholder = NSAttributedString(string:"TypeYourUsername", 
      attributes:[NSForegroundColorAttributeName: UIColor.whiteColor()]) 

     func textField(UsernameText: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
      if (string == " ") { 
       return false 
      } 
      return true 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewWillAppear(animated: Bool) { 
     UsernameText.becomeFirstResponder() 
    } 


    override func prefersStatusBarHidden() -> Bool { 
     return true 
    } 
} 
+0

Grazie! Mi ha salvato il tempo. – Raja

risposta

9

Sì, è possibile farlo. Override UITextField metodo delegato shouldChangeCharactersInRange. E in quel metodo controlla il carattere dello spazio. Se trovato, restituisce falso.

Nota: non dimenticare di impostare delegato per il campo di testo.

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    if (string == " ") { 
     return false 
    } 
    return true 
} 

Edit: Altro Codice

class ViewController : UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var textField : UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     textField.delegate = self 
    } 

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     if (string == " ") { 
      return false 
     } 
     return true 
    } 
} 

Qui textField oggetto è un IBOutlet. Significa che il controllo del campo di testo è nello storyboard e connesso con questa variabile.

+0

Grazie per la risposta. Ma ancora non funziona, ho incollato il codice sopra nella mia domanda. Lo spazio Key continua a creare spazi nel campo twext. Grazie ancora @Kampai –

+0

@DavideColla Controlla la modifica. – Kampai

+0

Grazie !!! Ha funzionato perfettamente! –

4

In Swift 2,0

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet() 
    let range = string.rangeOfCharacterFromSet(whitespaceSet) 
    if let _ = range { 
     return false 
    } 
    else { 
     return true 
    } 
} 
2

In Swift 2,1

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    let whitespaceSet = NSCharacterSet.whitespaceCharacterSet() 
    if let _ = string.rangeOfCharacterFromSet(whitespaceSet) { 
     return false 
     } 
    return true 
} 
1

Swift 3

class SignUpViewController: UIViewController, UITextFieldDelegate { 

lazy var emailTextField: UITextField = { 
    let tf = UITextField() 
    tf.translatesAutoresizingMaskIntoConstraints = false 
    tf.placeholder = "Email address" 
    tf.delegate = self 
    return tf 
}() 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    let whitespaceSet = NSCharacterSet.whitespaces 

    if let _ = string.rangeOfCharacter(from: whitespaceSet) { 
     return false 
    } 
    else { 
     return true 
    } 
} 
} 
2

Swift 4 Xcode 9

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

if string == " " { 
    return false 
}else{ 
    return true 
} 
} 
1
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    let whitespaceSet = CharacterSet.whitespaces 
    if let _ = string.rangeOfCharacter(from: whitespaceSet) { 
     return false 
    } else { 
     return true 
    } 
} 
Problemi correlati