swift3.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)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容