美文网首页
使用响应链方法实现传值及事件传递

使用响应链方法实现传值及事件传递

作者: _狸约约 | 来源:发表于2018-08-13 17:03 被阅读0次

    假设现在有一个需求, 如果一个自定义cell中有一个button, button的点击事件要将自定义cell中的某个属性值传给控制器, 应该怎么做?

    当然你可以利用代理, 通知, 和block回调, 除此之外, 还有没有其他办法呢? 有! 那就是今天要说的路由响应链方法,避免了重复代码及代码美观性

    代码总共分为三个部分
    1、UIResponder类别

    @objc
    extension UIResponder {
        func router(name: String, modelInfo: NSDictionary) {
            if let next = self.next {
                //当自己没有相应这个方法的时候,去查找下一个相应者
                next.router(name: name, modelInfo: modelInfo)
            }
        }
    }
    

    2、UITableViewCell

    class TestCell: UITableViewCell {
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
            super.init(style: style, reuseIdentifier: reuseIdentifier)
            
            let button = UIButton(type: .custom)
            button.frame = CGRect(x: 100, y: 0, width: 100, height: 100)
            button.backgroundColor = UIColor.red
            button.addTarget(self, action: #selector(buttonTapped(sender:)), for: .touchUpInside)
            self.contentView.addSubview(button)
        }
        
        @objc private func buttonTapped(sender: UIButton) {
            sender.router(name: "TestButton", modelInfo: ["name": "hello world"])
        }
    }
    

    3、UIViewController(关键代码)

    override func router(name: String, modelInfo: NSDictionary) {
         //实现这个方法即可
         //打印可知,传递过来的参数是cell传递的参数
    }
    

    相关文章

      网友评论

          本文标题:使用响应链方法实现传值及事件传递

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