web-dev-qa-db-fra.com

Échec de la génération IBDesignable

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 

 error

15
VishalPethani

Il va échouer car les variables de IBInspectable sont utilisées dans quelqu'un d'autre IBDesignable class 

  • J'ai donné un nom différent à ma classe
  • projet propre. 
  • puis sélectionnez Storyboard, accédez au menu Editeur et effectuez une actualisation de toutes les vues ou bien sélectionnez la vue de rafraîchissement automatique; attendre que la construction soit terminée
3
VishalPethani

Premier essai: échec de la génération IBDesignable

Pour moi, lorsque je survolais la InterfaceBuilderDesignables: 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!

39
Randika Vishman

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! :-)

5
WholeCheese

Je suis aussi tombé sur cette question et j'ai deux suggestions qui pourraient être utiles:

  1. Dans le "Navigateur de rapports" (cmd-9), consultez le journal de génération "Interface Builder". Il s'agit d'une version distincte de celle de votre projet. Il pourrait y avoir des messages d'erreur utiles au lieu de "Build failed".
  2. La construction d'Interface Builder est réalisée pour le simulateur, c'est-à-dire l'architecture x86_64. Certaines parties d'iOS (comme Metal dans mon cas) ne sont pas présentes sur le simulateur, ce qui entraîne des échecs de construction. J'ai défini certaines classes et fonctions à l'intérieur de blocs #if targetEnvironment(simulator) pour au moins réussir la construction.
2
Jan Misker

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.

0
Duncan Groenewald

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.

0
ak_ninan

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.

0
Anup G Prasad