在nib文件的自定义视图中设置自定义代理

问题描述:

我有从nib文件加载的自定义视图。这个视图有一个自定义的委托,我将委托设置到我的主视图控制器,但是在某个时候,委托被重新设置为nil。 这里是我的自定义视图添加到我的视图控制器在nib文件的自定义视图中设置自定义代理

@IBAction func newGoalButtonTapped(_ sender: UIBarButtonItem) { 
    let newGoalView = AddGoalView(frame: self.view.frame) 
    newGoalView.delegate = self 
    self.view.addSubview(newGoalView) 
    newGoalView.present() 
} 

这是我如何加载nib文件在我的自定义视图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 
} 

,这是我声明我的协议

protocol NewGoalCreatedDelegate { 
     func newGoalCreated(with proteinGoal:Int16, isCurrent:Bool)} 

我将我的nib文件的文件所有者设置为我的自定义类“AddGoalView”,并将视图自定义类设置为“AddGoalView”。我也试过其中一种,但没有运气。

委托人不是零,直到我现在的方法。

internal func present() { 
    UIView.animate(withDuration: 0.3, animations: { 
     self.center = self.superview!.center 
    }, completion: {(finished:Bool) in 
     print(self.delegate!) 
    }) 
    print(self.delegate!) 
} 

之后,委托是零,我知道这是有关如何使用我的笔尖文件,但我不知道它是什么。

+0

我觉得你对* Swing * vs * Swift *(已经修复)感到困惑 – Frakcool

+1

@Frakcool谢谢! –

+0

您的视图控制器是否符合委托?即'类ViewController:UIViewController,NewGoalCreatedDelegate {}'? – Pierce

我忘到网点文件的所有者联系,我xib.file enter image description here

的意见。