【问题标题】:How to set UIView delegate?如何设置 UIView 委托?
【发布时间】:2016-03-03 09:04:01
【问题描述】:

我有一个 UIViewController

class WelcomeViewController: UIViewController

还有一个 UIView

class SignUpView: UIView

现在我想在SignUpViewWelcomeViewController 代表中设置:

protocol SegueDelegate {
    func runSegue(identifier: String)
}

class SignUpView: UIView { ... }

并连接它

class WelcomeViewController: UIViewController, SegueDelegate {

如何在我的 WelcomeViewController 中设置这些委托?当我尝试设置时:

override func viewDidLoad() {
    SignUpView.delegate = self
}

它返回我

Instance member 'delegate' cannot be used on type 'SignUpView'

我怎样才能找到解决方案?

【问题讨论】:

  • 我假设 delegate 属性不在类级别,而是在实例级别;我说的对吗?

标签: ios swift uiview delegates protocols


【解决方案1】:

您正在尝试将委托设置为一个类。它应该是类的一个实例,即

let signUpView = SignUpView()
signUpView.delegate = self

【讨论】:

  • 是的,它可以工作,但为什么我的委托函数没有调用?你能看看我的代码吗?很短 - pastebin.com/7J5bSTzd
  • 一切似乎都很好,你能检查一下 signUp 是否真的被调用并且你有一个 id 为“goToMainPage”的segue
  • 它甚至不调用我的委托函数。是的,我有这样的转场
  • 注册函数调用是否正确?
  • 是的,那些函数调用成功,但委托部分 - 不是
【解决方案2】:

这样做有什么意义?如果你想从一个视图导航到另一个视图,只需在 Storyboard 中添加带有标识符的 Segue,这样你就可以调用 self.performSegueWithIdentifier("IdentifierOfSegue", sender: self)

【讨论】:

    【解决方案3】:

    在该委托(协议)的 SignUpView 中创建一个弱属性并将其命名为委托以外的其他名称

    然后你就可以设置和使用了。

    【讨论】:

    • 是的,它可以工作,但为什么我的委托函数没有调用?你能看看我的代码吗?很短 - pastebin.com/7J5bSTzd
    • 请将其重命名为 segueDelegate 然后检查
    • 这个var delegate: SegueDelegate?变量名还是在哪里?对不起,我没有抓住它
    • var segueDelegate : SegueDelegate?
    • 然后设置 SignUpView。 segueDelegate = 自我
    【解决方案4】:

    我同意开发人员所说的“你可以通过 segue 做到这一点”,但是 问题是您没有在 SignUpView 类中声明委托变量 所以你可以在 signIn 中实现它,如果你声明了它,请在评论中为我写下这行代码以检查它 目前 ... 我可以建议您将子视图设置为父类,然后覆盖 你想调用哪个方法 并且您需要将委托 var 声明为可选(这样您就没有 一个内存周期),如以下行...

    var delegate: SegueDelegate?
    

    【讨论】:

      【解决方案5】:

      让我们为有需要的人解决这个问题,他们在阅读此问题时可能需要解决方案:

      在你的 UIView 中:

      class SignUpView: UIView
      

      你需要添加:

      var delegate : SegueDelegate?
      

      现在,还在你的班级SignUpView,你需要添加你想要委托的函数,就像这样:

      func runSegue(identifier: String) {
          delegate?.runSegue(identifier)
      }
      

      这将调用您的委托:

      protocol SegueDelegate {
          func runSegue(identifier: String)
      }
      

      现在,在您的 ViewController 中,您应该在某处拥有您的 SignUpView(以编程方式创建或通过 Storyboard/XIB 链接)。

      在您的viewDidLoad函数中,添加:signUpView.delegate = self

      别忘了在你的班级遗产中添加SegueDelegate

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-18
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多