2015-04-08 3 views
1

Comment ajouter un point dans le pavé numérique? Je veux quand j'utilise la notification UIKeyboardDidShowNotification un UIButton apparaître sur le côté gauche du clavier du pavé numérique.Swift - Ajouter un point dans le clavier du pavé numérique

Ce sera le cadre du bouton: let dotButton = UIButton(frame: CGRectMake(0, 162, view.frame.width/3, 54)), mais il doit être ajouté en tant que sous-vue du nombre clavier pad pour éviter de se cacher, comment sera fait?

Edit: je l'ai fait apparaître comme ce

dotButton.addTarget(self, action: "addDot:", forControlEvents: .TouchUpInside) 
    dotButton.setTitle(".", forState: .Normal) 
    dotButton.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 25) 
    dotButton.setTitleColor(UIColor.blackColor(), forState: .Normal) 
    dispatch_async(dispatch_get_main_queue(), { 
     let keyboardView:UIView = UIApplication.sharedApplication().windows.last?.subviews.first as! UIView 
     self.dotButton.frame = CGRectMake(0, keyboardView.frame.size.height-54, self.view.frame.width/3, 54) 
     keyboardView.addSubview(self.dotButton) 
     keyboardView.bringSubviewToFront(self.dotButton) 
    }) 

mais maintenant je ne sais pas comment quand je clique sur le bouton pour ajouter. dans le textField avec la méthode addDot je ne sais pas comment dire au textField pour ajouter un. encore besoin d'aide ...

Edit2: J'ai fait une variable de classe qui est textFieldInEdit:UITextField! et func textFieldShouldBeginEditing(textField: UITextField) -> Bool Je le fais textFieldInEdit = textField et maintenant ma fonction addDot est:

textFieldWhichEdit.text = "\(textFieldWhichEdit.text).",

mais je J'ai un autre problème maintenant .. J'ai des champs avec différents types de clavier comment détecter quel clavier apparaît et montrer le point sur le pavé numérique seulement?

Edit3:

func textFieldDidBeginEditing(textField: UITextField) { 
    if(textField.keyboardType.rawValue==4){ 
     textFieldWhichEdit = textField 
     dotButton.hidden = false 
    }else{ 
     dotButton.hidden = true 
    } 
} 

fait, je l'ai fait un bouton de point sur le clavier Ergonomique :) Si quelqu'un sait meilleure méthode peut écrire et je vais accepter la réponse :)

+0

Vous pouvez faire en sorte que votre champ de texte accepte la virgule pour l'entrée des fractions décimales –

+0

Je veux. pour faire des doubles :) –

+0

Je sais que j'ai déjà répondu à cette question laissez-moi trouver la réponse –

Répondre

0

Ajouter UITextfieldDelegate à votre contrôleur, reliez ensuite le champ de texte à nouveau par un IBOulet (tfTest par exemple), puis implémentez le rappel shouldChangeCharactersInRange comme ceci.

@IBOutlet weak var tfTest: UITextField! 

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

    var newText: NSString = textField.text as NSString 
    newText = newText.stringByReplacingCharactersInRange(range, withString: string) 

    var isEmptyNew = (newText as String).rangeOfString(".", options: NSStringCompareOptions.allZeros, range: nil, locale: nil)?.isEmpty ?? true 

    if isEmptyNew { 
     //change to decimal pad as we allow to add decimal point now 
     textField.keyboardType = UIKeyboardType.DecimalPad 

     //refresh responder to change keyboard layout 
     textField.resignFirstResponder() 
     textField.becomeFirstResponder() 
     return true; 
    } 

    var isEmptyOld = textField.text.rangeOfString(".", options: NSStringCompareOptions.allZeros, range: nil, locale: nil)?.isEmpty ?? true 

    //if pressed button is the dot and your text field has already a dot, do not allow this. Normally, this case does not happen cause your keyboard type was changed to number pad before 
    if string == "." && !isEmptyOld { 
     return false 
    } else { 
     //show just numbers 
     textField.keyboardType = UIKeyboardType.NumberPad 
     //refresh responder to change keyboard layout 
     textField.resignFirstResponder() 
     textField.becomeFirstResponder() 

     return true 
    } 
} 

Pour éviter problème avec le séparateur décimal (. Ou), utilisez ce code pour récupérer le séparateur décimal et de l'utiliser au lieu de la valeur de code dur

let df = NSNumberFormatter() 
df.locale = NSLocale.currentLocale() 

let decimalPoint = df.decimalSeparator ?? "." 
+0

Non, avant quelques mois, je l'ai fait mais je supprime le code et maintenant je ne me souviens pas comment le faire ... –

+0

Cochez cette réponse https://stackoverflow.com/a/46359365/2599596 –

12

yourTextField.keyboardType = UIKeyboardType.DecimalPad

+2

Le pavé décimal a "," et non "." –