2017-02-21 4 views
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ファイルをどのように使用しているかに関係していますが、わかりません。

+0

スウィング*スウィフト*(固定) – Frakcool

+1

@Frakcoolありがとう! –

+0

View Controllerはデリゲートに正しく準拠していますか?つまり、 'ViewControllerクラス:UIViewController、NewGoalCreatedDelegate {}'? – Pierce

答えて

0

私は私のxib.file enter image description here

の景色に、ファイルの所有者にコンセントをリンクするのを忘れました。

関連する問題