J'ai une sous-classe très simple de UITextView qui ajoute la fonctionnalité "Placeholder" que vous pouvez trouver native à l'objet Text Field. Voici mon code pour la sous-classe:
import UIKit
import Foundation
@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
@IBInspectable var placeholder: String = "" {
didSet {
setPlaceholderText()
}
}
private let placeholderColor: UIColor = UIColor.lightGrayColor()
private var textColorCache: UIColor!
override init(frame: CGRect) {
super.init(frame: frame)
self.delegate = self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
if textView.text == placeholder {
textView.text = ""
textView.textColor = textColorCache
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text == "" && placeholder != "" {
setPlaceholderText()
}
}
func setPlaceholderText() {
if placeholder != "" {
if textColorCache == nil { textColorCache = self.textColor }
self.textColor = placeholderColor
self.text = placeholder
}
}
}
Après avoir changé la classe de l' UITextView
objet dans l'inspecteur d'identité sur PlaceholderTextView
, je peux définir la Placeholder
propriété très bien dans l'inspecteur d'attributs. Le code fonctionne très bien lors de l'exécution de l'application, mais n'affiche pas le texte d'espace réservé dans le générateur d'interface. J'obtiens également les erreurs non bloquantes suivantes (je suppose que c'est pourquoi il n'est pas rendu au moment de la conception):
erreur: IB Designables: échec de la mise à jour de l'état de la mise en page automatique: Interface Builder Cocoa Touch Tool a planté
erreur: IB Designables: échec du rendu de l'instance de PlaceholderTextView: le rendu de la vue a pris plus de 200 ms. Votre code de dessin peut souffrir de performances lentes.
Je ne suis pas en mesure de comprendre la cause de ces erreurs. La deuxième erreur n'a aucun sens, car je ne remplace même pas drawRect (). Des idées?
la source
Réponses:
Des rapports d'erreur sont générés lorsque l'Interface Builder Cocoa Touch Tool plante. Les thèses sont localisées
~/Library/Logs/DiagnosticReports
et nomméesIBDesignablesAgentCocoaTouch_*.crash
. Dans mon cas, ils contenaient une trace de pile utile qui identifiait le problème dans mon code.la source
initFrame(frame: CGRect)
fallait définir cela. Faites-le si vous fournissez vos propresinit
méthodes.init(frame: CGRect)
explicitement le parce que j'avais uneini
méthode personnalisée . Vous voudrez peut-être consulter le rapport d'use of unimplemented initializer 'init(frame:)'
incident directement sousApplication Specific Information
le rapport. Merci les gars! Double victoire dans cette réponse!J'ai eu le même problème à plusieurs reprises. Les deux fois, cela a commencé lorsque je chargeais une pointe IBDesignable sur le storyboard lorsque la pointe ne pouvait pas s'adapter à la vue (c'est-à-dire que j'avais un bouton hors de l'UIView mais toujours dans la pointe). Une fois que j'ai corrigé que Xcode me donnait toujours des erreurs, j'ai redémarré Xcode jusqu'à ce qu'il cesse de me donner l'erreur.
J'espère que ça aide.
MISE À JOUR: Je viens de tuer tous les processus nommés "Interface Builder Cocoa Touch Tool", redémarré Xcode et l'erreur a disparu. Je ne sais pas si cela fonctionnera toujours ou non.
la source
init
méthodes, le code publié dans le cadre de la question ne montre plus lesIB Designables
erreurs et l'espace réservé est correctement rendu dans Interface Builder.Dans mon cas, je faisais le suivant dans les méthodes initWithFrame / initWithCoder pour créer la vue:
Il semble que je n'étais pas censé utiliser le bundle principal , mais plutôt le bundle de la classe. J'ai donc remplacé ce code pour ce qui suit et cela a fonctionné:
J'ai pensé que cela pourrait peut-être aider quelqu'un.
la source
let bundle = Bundle(for: ValidatingTextField.self)
à SwiftVous pouvez sélectionner votre vue personnalisée dans Interface Builder et puis utilisez
Editor
,Debug Selected Views
. Il lancera une soi-disantIBDesignableAgentCocoaTouch
session de débogage lorsque tous les points d'arrêt (y compris les points d'arrêt d'exception) fonctionnent et que vous pourrez identifier exactement l'endroit où votre vue se bloque.la source
Pour Xcode 8 - Swift
Ajout d'une valeur facultative comme valeur par défaut lors de la
@IBInspectable
création du problème pour moi.Cela ne fonctionnera pas:
Cela devrait fonctionner:
la source
J'étais confronté à des problèmes similaires d'Interface Builder pour rendre les designables.
En utilisant la technique suggérée dans cette réponse, j'ai pu retracer le problème jusqu'à l'utilisation des littéraux d'image.
Crash de rendu
Aucun crash de rendu
la source
En fait, si vous avez d' anciens attributs définis par l'utilisateur (qui ne sont pas valides pour la vue actuelle) dans n'importe quelle vue de votre storyboard, cela peut provoquer le blocage de votre agent.
De plus, cela arrive parfois juste à cause d'un vilain bogue de Xcode. Pour le vérifier, lorsque vous êtes au storyboard, décochez Editeur> Actualiser automatiquement les vues, puis passez à un autre fichier, nettoyez et redémarrez votre projet. Une fois que vous avez à nouveau entré le storyboard, vous pouvez cliquer sur Editeur> Actualiser les vues et cocher à nouveau une vue automatique. Celui-ci a également résolu mon problème une fois.
Si les deux ne fonctionnent pas, alors vous avez probablement fait quelque chose de mal à propos de votre vue IBDesignable, alors choisissez vos vues plantées dans le storyboard et le débogage en cliquant sur Éditeur> Vues de débogage
la source
Ce n'est pas le cas pour cette question, mais je vais peut-être aider quelqu'un d'autre.
J'ai eu un problème similaire lorsque dans ma classe @IBDesignable je n'ai pas implémenté les deux:
la source
J'ai eu le même problème et je l'ai résolu en ajoutant le 'use_frameworks!' au Podfile de mon projet.
J'espère que cela vous aide.
la source
Dans mon cas, c'était en quelque sorte lié à un cadre de carthage que j'utilisais. J'ai dû ajouter $ (PROJECT_DIR) / Carthage / Build / iOS au paramètre de construction Runpath Search Paths
la source
Dans mon cas, c'était un problème avec OneSignal. Apparemment, ils ont un bogue dans la version 2.2.0 et supérieure. Passé à 2.1.6 et tout est à nouveau super!
Regardez ceci .
la source
Lorsque j'ai débogué cela, j'ai découvert qu'il existe des classes qui modifient l'interface utilisateur. Typiquement marquelabel qui est une sous-classe d'UILabel ou de toute autre classe sous-classant UIView et dessinant l'interface utilisateur au moment de l'exécution et entrant en collision avec le moteur Autolayout. Essayez de donner une largeur ou une hauteur fixe pour ces vues personnalisées. Si cela ne résout pas votre problème, essayez les solutions suivantes: -
Solution 1: - Décommentez #use_frameworks dans votre fichier pod.
Solution 2: - Essayez de supprimer les données dérivées. 1. Fermez la fenêtre de l'éditeur de votre Xcode et quittez le simulateur -> 2. Allez dans Préférences Xcode -> Emplacements -> 3. Cliquez sur la petite flèche grise montrant le chemin des données dérivées -> 4. Sélectionnez votre projet -> 5. Supprimez tous les dossiers à l'intérieur -> 6. Quittez Xcode et rouvrez
la source
Ajoutez-le au bas de votre Podfile et exécutez
pod install
la source
Ajoutez ce script à la fin de mon
Podfile
etpod install
recommencez.la source
Un problème majeur est lorsque vous créez @ IBDesignable, assurez-vous que le fichier cocoapod n'est pas inclus dans les UITests, sinon cela provoquera ce plantage.
la source
Je trouve que la raison en est que votre xib n'est pas de la même taille que le design du storyboard. Assurez-vous que le xib a la même hauteur et la même largeur.
la source
Il me manquait juste cette ligne de code
platform :ios, '7.0'
et le problème a été résolu. Juste cette ligne dans votre fichier pod et mettre à jour votre problème de pod sera résolu.la source
Pour moi, c'était un certificat de signature manquant, car je n'ai jamais exécuté l'application, donc Xcode n'a pas encore créé de certificat. Une fois que j'ai exécuté l'application, le
IBDesignable
rendu a bien fonctionné.la source
C'est comme si vous aviez du code d'un autre développeur et que vous obteniez cette erreur. Courez
Cela a fonctionné pour moi. J'espère que ça aide.
la source
Assurez-vous que vous n'initialisez pas directement
UIImage
ouUIFont
n'utilisez pas les actifs ou les polices ajoutés dans votre projet.Je crée toujours un
private func setUp()
dans mes classes@IBDesignable
personnaliséesUI
. qui est appelé à partirinit(frame: CGRect)
,init?(coder aDecoder: NSCoder)
. J'ai donc finalement mis à jour lesetup()
comme suit.la source
Laissez-le simplement construire et fonctionner sur le simulateur si vous avez une erreur ailleurs dans le projet, commentez-le et exécutez d'abord Designable pour mettre à jour Designable et décommenter les autres codes. Ça marche pour moi.
la source