从 nib 文件在自定义视图中设置自定义委托

Posted

技术标签:

【中文标题】从 nib 文件在自定义视图中设置自定义委托【英文标题】:setting custom delegate in custom view from nib file 【发布时间】:2017-02-21 00:45:51 【问题描述】:

我有一个从 nib 文件加载的自定义视图。这个视图有一个自定义委托,我将委托设置为我的主视图控制器,但在某些时候委托再次设置为 nil。 这是我将自定义视图添加到我的视图控制器

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

这是我在自定义视图初始化方法中加载 nib 文件的方式

 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!)

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

【问题讨论】:

我认为你在 SwingSwift 中感到困惑(已经修复) 您的视图控制器是否正确地符合委托?即class ViewController: UIViewController, NewGoalCreatedDelegate ? 是的!否则我将无法将 self 设置为属性委托:NewGoalCreatedDelegate 【参考方案1】:

我忘记将文件所有者中的出口链接到我的 xib.file 的视图

【讨论】:

以上是关于从 nib 文件在自定义视图中设置自定义委托的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 在 Xcode 6 中使用 xib 在自定义 uiview 中获取 SIGABRT

在自定义单元格中聚焦 UITextfield

从 Connections Inspector 中隐藏 Outlets 以获取自定义视图

iPhone:如何在自定义单元的动态数量上管理 UITextfield 委托方法

Swift 从 Nib 创建自定义视图

在自定义 UIview 中设置 UItableview 的委托和数据源