J'ai créé les classes personnalisées IBDesignable
et IBInspectable
pour donner l'ombre et le rayon de l'angle de vue
Mais lorsque j'assigne la classe Designable
à view
, la génération désignable a échoué
C'est mon code
import Foundation
import UIKit
@IBDesignable
class DesignableView: UIView {
}
@IBDesignable
class DesignableButton: UIButton {
}
@IBDesignable
class DesignableLabel: UILabel {
}
@IBDesignable
class DesignableTableView: UITableView {
}
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
@IBInspectable
var borderWidth: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable
var borderColor: UIColor? {
get {
if let color = layer.borderColor {
return UIColor(cgColor: color)
}
return nil
}
set {
if let color = newValue {
layer.borderColor = color.cgColor
} else {
layer.borderColor = nil
}
}
}
@IBInspectable
var shadowRadius: CGFloat {
get {
return layer.shadowRadius
}
set {
layer.shadowRadius = newValue
}
}
@IBInspectable
var shadowOpacity: Float {
get {
return layer.shadowOpacity
}
set {
layer.shadowOpacity = newValue
}
}
@IBInspectable
var shadowOffset: CGSize {
get {
return layer.shadowOffset
}
set {
layer.shadowOffset = newValue
}
}
@IBInspectable
var shadowColor: UIColor? {
get {
if let color = layer.shadowColor {
return UIColor(cgColor: color)
}
return nil
}
set {
if let color = newValue {
layer.shadowColor = color.cgColor
} else {
layer.shadowColor = nil
}
}
}
}
C'est ce que j'ai
Il va échouer car les variables de IBInspectable
sont utilisées dans quelqu'un d'autre IBDesignable
class
Pour moi, lorsque je survolais la InterfaceBuilder
Designables: Build Failed
, Cela donnait un message d'erreur disant quelque chose comme:
Impossible de trouver des fichiers source pour la déclaration ou ...
Donc, je l'ai eu comme indice, car Xcode ne pouvait pas indexer mon fichier de classe UIView
personnalisé. J'ai donc quitté Xcode, puis je l'ai redémarré, puis mon fichier de classe Swift personnalisé a été indexé et InterfaceBuilder a pu le trouver correctement .
Commencez par l’essayer, puis choisissez d’autres options!
Dans mon cas, les objets de conception fonctionnaient correctement dans mon storyboard jusqu'à ce que je supprime quelques étiquettes de la vue qui n'étaient plus nécessaires pour mon interface utilisateur.
Il n'y avait aucun message utile dans le journal de génération ou dans le dossier DiagnosticReport.
Le correctif pour moi était de supprimer le dossier DerivedData (un "redémarrage" de XCode) et de reconstruire le projet. Comme par magie, le storyboard montre à nouveau mes boutons personnalisés! :-)
Je suis aussi tombé sur cette question et j'ai deux suggestions qui pourraient être utiles:
#if targetEnvironment(simulator)
pour au moins réussir la construction.J'ai également eu du mal à le faire, puis j'ai supprimé les données dérivées des projets et redémarré Xcode avant que cela ne fonctionne à nouveau. "Déboguer les vues sélectionnées" était toujours désactivé et la construction pouvant être désignée était toujours considérée comme ayant échoué. App compilé et couru bien.
Si votre CustomClass est ajoutée au projet en tant que fichier de référence, cela se produit alors ..__ C'est-à-dire, par exemple, vous pouvez voir le dossier de couleur bleue dans l'explorateur de projet, qui sont des dossiers de référence. Si vous copiez les classes dans notre projet, assurez-vous que l'option "Copier les éléments si nécessaire" est sélectionnée.
Dans mon cas, c'était le problème.
Même avec les 2 premières étapes fixes mien . 1. Définissez la classe sur DesignableView . 2. Réglez le module sur 3. Nettoyez le build . 4. Redémarrez Xcode.