0
nibファイルからロードするカスタムビューがあります。このビューにはカスタムデリゲートがあり、デリゲートをメインビューコントローラに設定しましたが、デリゲートがnilに再び設定されることがあります。ここ は、私は私のビューコントローラここカスタムビューでカスタムデリゲートをnibファイルから設定する
@IBAction func newGoalButtonTapped(_ sender: UIBarButtonItem) {
let newGoalView = AddGoalView(frame: self.view.frame)
newGoalView.delegate = self
self.view.addSubview(newGoalView)
newGoalView.present()
}
にカスタムビューを追加している私は私のカスタムビューのinitメソッド
override init(frame: CGRect) {
super.init(frame:CGRect(x: frame.origin.x + 10, y: frame.height, width: frame.width - 20, height: frame.height/3))
self.addSubview(self.instanceFromNib())
}
private func instanceFromNib() -> AddGoalView {
return UINib(nibName: "AddGoalView", bundle: nil).instantiate(withOwner: self, options: nil)[0] as! AddGoalView
}
にnibファイルをロードする方法であり、これは私が私のプロトコル
を宣言する方法ですprotocol NewGoalCreatedDelegate {
func newGoalCreated(with proteinGoal:Int16, isCurrent:Bool)}
私のnibファイルのファイル所有者を自分のカスタムクラス "AddGoalView"に設定し、ビューのカスタムクラスを "AddGoalView"に設定しました。私はどちらか一方を試しましたが、運はありませんでした。
私の現在のメソッドの後まで、デリゲートはisnt nilです。
internal func present() {
UIView.animate(withDuration: 0.3, animations: {
self.center = self.superview!.center
}, completion: {(finished:Bool) in
print(self.delegate!)
})
print(self.delegate!)
}
デリゲートがnilであることを知っていますが、これは私のnibファイルをどのように使用しているかに関係していますが、わかりません。
スウィング*スウィフト*(固定) – Frakcool
@Frakcoolありがとう! –
View Controllerはデリゲートに正しく準拠していますか?つまり、 'ViewControllerクラス:UIViewController、NewGoalCreatedDelegate {}'? – Pierce