Comment créer un IBInspectable de type enum
enum
est pas une Interface Builder définis en exécution de l'attribut.
Le suivant ne s'affiche pas dans Interface Builder Attributs de l'Inspecteur:
enum StatusShape:Int {
case Rectangle = 0
case Triangle = 1
case Circle = 2
}
@IBInspectable var shape:StatusShape = .Rectangle
À partir de la documentation:
Vous pouvez joindre la IBInspectable attribut à une propriété dans une déclaration de classe, extension de classe, ou par catégorie pour tout type pris en charge par l'Interface Builder défini runtime attributs: booléen, entier, nombre à virgule flottante, une chaîne, une chaîne localisée, le rectangle, le point, la taille, la couleur, la gamme, et de néant.
Q: Comment puis-je voir un enum
dans Interface Builder Attributs de l'Inspecteur?
- Où est enum dans cette liste? Pourquoi voudriez-vous que vous pouvez utiliser un enum?
- Il serait agréable d'être en mesure de choisir un
enum
affaire directement à partir de l'IB, je suppose, ou unUIFont
, comme le natif de UIKit objets peuvent.
Vous devez vous connecter pour publier un commentaire.
Swift 3
@IBInspectable
var shape:StatusShape = .Rectangle
crée simplement une entrée vide dans Interface Builder:Utiliser un adaptateur, qui agit comme un pont entre Swift et Interface Builder.
shapeAdapter
est possible à partir de l'IB:Contrairement à la compilation conditionnelle approche (à l'aide de
#if TARGET_INTERFACE_BUILDER
), le type de lashape
variable ne change pas avec la cible, ce qui pourrait nécessiter plus modification du code source pour faire face à lashape:NSInteger
vsshape:StatusShape
variations:Code complet
► Trouver cette solution sur GitHub.
shapeAsInt
comme un bien, plutôt que d'une propriété calculée?writeonly
bien... mais une propriété calculée n'est pas de créer une sauvegarde de variable d'instance comme sauvegardées sur votre propriété.ViewController.swift
ligne 37 sur github.com/SwiftArchitect/SO-27432736:shape
est@IBInspectable
pas encore visible dans IBAu lieu de mettre votre inspectable les énumérations avec ints, vous pouvez aussi les mettre avec des chaînes. Bien que pas tout à fait comme préférable, comme une liste déroulante, au moins cette option offre un certain niveau de lisibilité.
Swift seule Option:
Il est également possible d'obtenir que cela fonctionne avec objective-c ainsi, par l'ajout d'un initialiseur de l'enum. Cependant, le compilateur n'affiche que le "erreur non disponible" pour votre IB-seules les propriétés dans le code swift.
Swift Option avec l'Obj-C-Compatibilité:
Swift Only
version: il permet de la plaine de l'anglais dans IB.Je ne me souviens pas de la swift de la syntaxe, mais c'est comment je l'ai résolu en obj-c
C'est un vieux thread mais utile. J'ai adapté ma réponse à swift 4.0 et Xcode 9.0 - Swift 4 a ses propres petits problèmes avec ce problème. Je vais avoir un @IBInspectable variable de type enum et Xcode 9.0 n'est pas heureux, me montrant cette "Propriété ne peut pas être marqué @IBInspectable parce que son type ne peut pas être représentant en Objective-c"
@Eporediese réponses à ce problème (pour swift3) dans la partie; à l'aide d'une propriété pour le storyboard, mais un droit enum pour le reste du code. Ci-dessous est un code plus complet jeu qui vous donne une propriété pour travailler avec dans les deux cas.
Swift 3
solution basée sur SwiftArchitect
#if TARGET_INTERFACE_BUILDER
bloc n'affectera que le rendu dans Interface Builder, pas au moment de l'exécution. Ce sera probablement entraîner un comportement inattendu et vous obtenez toujours un message d'avertissement dans la console:Failed to set (statusShapeIB) user defined inspected property ...: this class is not key value coding-compliant for the key statusShapeIB.
d'où cette erreur est apparu (il était deux fois pour moi). Cela va vous obliger à
déverrouiller le VHBoomMenuButton bibliothèque de sorte que vous pouvez apporter des modifications.