美文网首页
swift3.0代理模式

swift3.0代理模式

作者: figure_ai | 来源:发表于2017-01-06 00:17 被阅读0次
    • 以view文件和controller文件的数据传递为例,代码如下

    view文件中

    
    import UIKit
    //定义协议
    protocol LoginViewDelegate: class {
        func loginButtonClick(btn: UIButton)
    }
    class LoginView: UIView {
        //代理属性
        public weak var delegate: LoginViewDelegate?    
    
      override func layoutSubviews() {
           //添加一个按钮
            loginButton.setTitle("登录", for: UIControlState.normal)
            loginButton.setTitleColor(UIColor.white, for: UIControlState.normal)
            loginButton.titleLabel?.font = UIFont.systemFont(ofSize: 15)
            loginButton.frame = CGRect(x: 100, y: 100, width:50, height: 30)
            loginButton.addTarget(self, action:#selector(loginButtonClick), for: .touchUpInside)
            self.addSubview(loginButton)
      }
        //按钮的点击事件
        func loginButtonClick() {
            print(""点击了登录按钮")
            //调用代理方法
            delegate?.loginButtonClick(btn: loginButton)
        }
    }
    

    controller文件中

    class LoginViewController: UIViewController,LoginViewDelegate{
            //初始化一个LoginView对象
            let loginView = LoginView()
            loginView.frame = self.view.frame
            self.view.addSubview(loginView)
             //设置代理属性
            loginView.delegate = self
     }
        //MARK: - LoginViewDelegate实现代理方法
        func loginButtonClick(btn: UIButton) {
            print("调用了代理方法-----" + (btn.titleLabel?.text)!)
        }
    


    Snip20170106_1.png
    • 在添加协议的时候可能会报以上错误,原因是因为没有实现protocol中的方法,protocol中的方法默认是必须实现的。可选实现需在协议和方法前加@objc,代码如下:
    @objc protocol LoginViewDelegate: class {
        @objc optional func loginButtonClick(btn: UIButton)
    }
    

    相关文章

      网友评论

          本文标题:swift3.0代理模式

          本文链接:https://www.haomeiwen.com/subject/kultbttx.html