Vous pouvez sous-classe UITextField
pour tout le champ de texte qui prennent quantité en tant que valeur.
class SpecialTextField: UITextField {
var amount: String {
get {
if self._amount.characters.count > 1 {
return (self._amount as NSString).substringFromIndex(2)
}
return ""
}
}
// MARK: - UITextField Observing
override internal func willMoveToSuperview(newSuperview: UIView!) {
if newSuperview != nil {
keyboardType = .DecimalPad
addTarget(self, action: #selector(SpecialTextField.didChangeText), forControlEvents: .EditingChanged)
}
}
override internal func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
return false
}
private var newVal: String = ""
private var _amount: String = ""
func didChangeText() {
if (text?.characters.count > 2) {
if text?.rangeOfString("$ ") == nil {
text = newVal
}
}
if (text?.characters.count == 1) && (text?.characters.count > newVal.characters.count) {
text = "$ " + text!
}
if (text?.characters.count == 2) && (text?.characters.count < newVal.characters.count) {
text = ""
}
newVal = text ?? ""
_amount = newVal
}
}
Ceci va insérer un signe $
chaque fois premier numéro est entré, et supprime chaque fois que tous les numéros sont supprimés.
var amount
donnera la valeur réelle que l'utilisateur a saisie, après avoir supprimé le signe $
.
J'espère que cela a aidé.
Avez-vous jeté un coup d'œil aux méthodes des délégués? plus précisément: '- (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) plage chaîneChange: (NSString *) chaîne' – CodaFi