2017-05-03 5 views
3

Je voulais créer une sélection de clavier de @IBInspectabaleVous voulez obtenir la sélection du clavier par @IBInspectable

keyboard selection

Comment atteindre cet

Je crée une vue dans laquelle insérer une ImageView et TextField, Maintenant, je crée cette classe de vue personnalisée comme @IBDesignable et j'ai créé les éléments @IBInspectable. Je réussis à créer des éléments d'image de côté et d'espace réservé, mais maintenant j'essaie de créer le type de clavier mais je suis confronté à des problèmes.

Code ciselée: `importation UIKit

@IBDesignable classe CustomTextField: UIView, UITextFieldDelegate {

//custom view from the XIB file 
var view: UIView! 

@IBOutlet weak var textField: UITextField! 
@IBOutlet weak var imageView: UIImageView! 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    loadViewFromNib() 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    loadViewFromNib() 
} 

func loadViewFromNib() { 
    let bundle = Bundle(for: type(of: self)) 
    let nib = UINib(nibName: "CustomTextField", bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 
    view.frame = bounds 
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    self.addSubview(view); 



} 

@IBInspectable var sideImage: UIImage? { 
    get { 
     return imageView.image 
    } 
    set(sideImage) { 
     imageView.image = sideImage 
    } 
} 

@IBInspectable var placeHolderText: String? { 
    get { 
     return textField.placeholder 
    } 
    set(placeHolderText) { 
     textField.placeholder = placeHolderText 
    } 
}' 

tout ce qui précède fonctionne très bien, mais suivante ne fonctionne pas pour moi:

@IBInspectable var keyboard: UIKeyboardType? { 
    get{ 
     return UIKeyboardType(rawValue: textField.keyboardType.rawValue) 
    } 
    set(keyboard){ 
     textField.keyboardType = keyboard! 
    } 
} 

}

Je l'ai essayé en créant enum mais ça ne donne aucun résultat pour moi.

+0

double possible de [? @IBInspectable avec ENUM] (http://stackoverflow.com/questions/28749598/ibinspectable-with-enum) – Oskar

Répondre

2

Il n'est pas possible d'utiliser des types enum pour @IBInspectable vars. Vous devez définir votre var comme String ou Int.

A partir de docs Apple:

Vous pouvez joindre l'attribut IBInspectable à une propriété dans une classe déclaration, extension de classe ou catégorie pour tout type qui est pris en charge par les attributs d'exécution défini Interface Builder: booléen , entier ou nombre à virgule flottante, chaîne, chaîne localisée, rectangle, point, taille, couleur, plage et aucun.

0

Tout d'abord, merci à tous. Mon problème est résolu sans faire d'efforts supplémentaires pour créer enum et tout. J'ai utilisé l'enum UIKeyboardType d'apple prédéfini. il suffit d'écrire le code suivant:

@IBInspectable var keyboard:Int{ 
    get{ 
     return self.textField.keyboardType.rawValue 
    } 
    set(keyboardIndex){ 
     self.textField.keyboardType = UIKeyboardType.init(rawValue: keyboardIndex)! 

    } 
} 

Et il affiche le clavier dans Interface Builder, et vous pouvez définir 0,1,2 ... valeur pour votre type de clavier. où le 0,1,2 représentent comme suit:

0: default // Default type for the current input method. 

1: asciiCapable // Displays a keyboard which can enter ASCII characters 

2: numbersAndPunctuation // Numbers and assorted punctuation. 

3: URL // A type optimized for URL entry (shows ./.com prominently). 

4: numberPad // A number pad with locale-appropriate digits (0-9, ۰-۹, ०-९, etc.). Suitable for PIN entry. 

5: phonePad // A phone pad (1-9, *, 0, #, with letters under the numbers). 

6: namePhonePad // A type optimized for entering a person's name or phone number. 

7: emailAddress // A type optimized for multiple email address entry (shows space @ . prominently). 

8: decimalPad // A number pad with a decimal point. 

9: twitter // A type optimized for twitter text entry (easy access to @ #)