Remplacer méthode init de UIView en swift
class CustomView: UIView {
var subViewColor:UIColor
var subViewMessage:String
override init(frame:CGRect) {
super.init(frame:frame)
}
init(subViewColor:UIColor,subViewMessage:String){
self.subViewColor = subViewColor
self.subViewMessage = subViewMessage
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
J'ai une classe où je veux l'utilisateur pour initialiser un affichage personnalisé soit en donnant des propriétés comme:
let myView = CustomLoadingView(initialize properties here)
Si l'utilisateur ne veut pas s'initialiser leurs propres propriétés, je veux initialiser CustomLoadingView
à l'aide de propriétés par défaut...
let myView = CustomLoadingView() // this should initialize using default value
Toutefois, dans ce cas, j'obtiens cette erreur:
Doit appeler désigné intializer de la super-classe UIView
OriginalL'auteur | 2016-02-19
Vous devez vous connecter pour publier un commentaire.
Dans
init(subviewColor: UIColor, subViewMessage: String)
, vous n'êtes pas à l'appel de la désignée d'initialiseur (comme le compilateur signale gentiment).Si vous ne savez pas quoi désigné initialiseurs sont, ils sont les initialiseurs que ont d'être appelé par le sous-classe à un certain point. À partir de la documentation:
Dans ce cas, le nom de l'initialiseur de
UIView
estinit(frame: CGRect)
, sens à un certain point, votre initializerinit(subviewColor: UIColor, subViewMessage: String
doit appelersuper.init(frame:)
.Afin de résoudre ce problème, effectuez les modifications suivantes:
OU vous pouvez appeler vos autres initialiseur dans votre classe qui finit par appeler désignés initialiseur.
Comme pour la méthode de convenance avec simplement
CustomLoadingView()
, vous devez ajouter une autre initialiseur. Ajoutez ce code à votre vue personnalisée:Si vous voulez en savoir plus sur désignés et la commodité des initialiseurs, de lire à leur sujet ici et ici.
self.init(frame: frame)
que la première chose leconvenience init
méthodeOriginalL'auteur tktsubota
Essayez ceci:
vous ne pouvez pas utiliser soi-même avant d'appeler la fonction super
OriginalL'auteur TechBee
Vous devez appeler l'un de UIView désigné initialiseurs à un certain moment dans votre personnalisé initialiseur, par exemple:
super.init(frame: frameX)
. Votre appel desuper.init()
ne satisfait pas à cette exigence.OriginalL'auteur sakurasunris3
Ennemi moi, c'était l'appel d'une xib qui n'existe pas à partir de la vue personnalisée initialiser dans
Bundle.main.loadNibNamed("XibNameThatDoesntExist", owner: self, options: nil)
`
OriginalL'auteur Michal Shatz