Interface Builder, @IBOutlet et les protocoles de délégué et de la source de données de Swift
Ne peut pas se connecter délégué de la propriété de CustomView
déclaré que @IBOutlet àViewController
dans Interface Builder – tout simplement ne peut pas établir une connexion.
Voici le code
class CustomView: UIView {
@IBOutlet var delegate: CustomViewDelegate?
}
@objc protocol CustomViewDelegate {
...
}
class ViewController: UIViewController, CustomViewDelegate {
...
}
@objc
est utilisé en raison de swift protocole, IBOutlet propriété ne peut pas avoir de non-type d'objet, ne sais pas pourquoi protocol CustomViewDelegate: class {}
ne fonctionne pas.
Quelqu'un d'autre est venu à travers quelque chose comme ça?
- Est-ce que votre
UIViewController
dans l'Interface Constructeur de sa classe définie spécifiquement pourViewController
? Aussi, il est normalement une obligation (le dernier que j'ai vérifié) que@IBOutlet
propriétés de l'être définie comme implicitement déballé types, comme suit:CustomViewDelegate!
. Cela leur permet d'êtrenil
à l'instanciation, tout en vous permettant de l'utiliser sans l'option de liaison après qu'ils ont été installés.
Vous devez vous connecter pour publier un commentaire.
De Xcode notes de version:
EDIT: Xcode 9 beta 3 notes de dire que cette solution de contournement ne devrait plus être nécessaire.
@IBDesignable
.Adam Waite offre une belle solution de contournement. J'ai cependant préférer la solution suivante car il met l'accent sur la solution de contournement et la propriété peut également facilement être retiré une fois que Xcode est résolu.
Hey, est ce bug est déjà un ans et demi?
Une élégante solution de contournement:
Voir:
https://github.com/WenchaoD/FSPagerView/blob/master/Sources/FSPagerView.swift#L88
Un autre qui ne l'est pas assez mais:
C'est un vieux thread, mais j'ai pensé que je ferais remarquer que comme de Xcode 9 beta 3, il est désormais possible de connecter un délégué personnalisé écrit en swift à interface builder.
Selon les notes de version
Pour moi, la raison en était la vue de la table a été
nil
au point que j'ai tenté de définir la source de données et à la délégation. Cela était dû à l'initialiseur d'appelinitWithNibName:bundle:
qui ne garantit pas initialisé connexions. Reportant mon délégué et de la source de données paramètreviewDidload
a travaillé comme un charme.