闭包:掌厨 Î 实例一 ,闭包的 声明与使用

闭包的 声明与使用

闭包: 实例一 ,闭包 + 属性

一个视图控制器 上面 有 一个 scrollView, 滚动视图 包含 三个界面。

三个界面 都是 表视图, 第一个界面 的 第一个 cell 是 滚动视图,CBRecommendADCell

点击 第一个界面 的 每一副 图片, 都有一个 新的 视图控制器。

class CBRecommendADCell: UITableViewCell , 这个是 最上层


class CBRecommendADCell: UITableViewCell {
    
    //public typealias CBCellClosure = (String?, String) -> Void
    //MARK:-  这个好   A

    //图片的点击事件
    var clickClosure: ((String?, String) -> Void)?
    //              2   A     声明
    
    @IBOutlet weak var scrollView: UIScrollView!

    @IBOutlet weak var pageCtrl: UIPageControl!
    
    
    //数据
    var bannerArray: Array<CBRecommendBannerModel>? {
        
        didSet {
            //显示UI
            showData()
            
        }
        
    }
    
    
    func showData(){
        
        //删除之前的子视图
        for sub in scrollView.subviews {
            sub.removeFromSuperview()
        }
        
        
        let cnt = bannerArray?.count
        if cnt > 0 {
            
            //0.添加一个容器视图
            let containerView = UIView.createView()
            scrollView.addSubview(containerView)
            //设置约束
            containerView.snp_makeConstraints(closure: {
                [weak self]
                (make) in
                make.edges.equalTo(self!.scrollView)
                make.height.equalTo(self!.scrollView)
            })
            
            
            
            var lastView: UIView? = nil
            for i in 0..<cnt! {
                
                //1.获取模型对象
                let model = bannerArray![i]
                
                //2.创建图片
                let tmpImageView = UIImageView.createImageView(nil)
                //在线加载图片
                /*
                 第一个参数:图片网址的url
                 第二个参数:默认图片
                 第三个参数:选项
                 第四个参数:可以获取下载的进度
                 第五个参数:下载结束的时候的操作
                 */
                
                let url = NSURL(string: model.banner_picture!)
                let image = UIImage(named: "sdefaultImage")
                tmpImageView.kf_setImageWithURL(url, placeholderImage: image, optionsInfo: nil, progressBlock: nil, completionHandler: nil)
                containerView.addSubview(tmpImageView)
                
                //添加手势
                tmpImageView.userInteractionEnabled = true
                tmpImageView.tag = 500+i
                let g = UITapGestureRecognizer(target: self, action: #selector(tapImage(_:)))
                tmpImageView.addGestureRecognizer(g)
                
                //约束
                tmpImageView.snp_makeConstraints(closure: { (make) in
                    make.top.bottom.equalTo(containerView)
                    make.width.equalTo(kScreenWidth)
                    if i == 0 {
                        make.left.equalTo(containerView)
                    }else{
                        make.left.equalTo((lastView?.snp_right)!)
                    }
                })
                
                lastView = tmpImageView
                
            }
            
            //修改容器视图的约束
            containerView.snp_makeConstraints(closure: { (make) in
                make.right.equalTo((lastView?.snp_right)!)
            })
            
            
            //修改分页控件
            pageCtrl.numberOfPages = cnt!
            
            //设置代理
            scrollView.delegate = self
            scrollView.pagingEnabled = true
            
        }
       
        
    }
    
    
    func tapImage(g: UIGestureRecognizer) {
        let index = (g.view?.tag)!-500
        
        //获取模型对象
        let imageModel = bannerArray![index]
        //MARK: -  B         闭包的  使用
        //要将点击事件传到视图控制器
        clickClosure!(nil, imageModel.banner_link!)
    }
    
    
    //创建cell的方法
    /*
     @param tableView:cell所在的表格
     @param indexPath:cell在表格上的位置
     @param model:cell显示的数据
     @param cellClosure:图片点击事件
     */
    
    
    //MARK:-  很好
    
    class func createAdCellFor(tableView: UITableView, atIndexPath indexPath: NSIndexPath, withModel model: CBRecommendModel,cellClosure: ((String?, String) -> Void)?) -> CBRecommendADCell {
        //  3     public typealias CBCellClosure = (String?, String) -> Void
        let cellId = "recommendADCellId"
        
        var cell = tableView.dequeueReusableCellWithIdentifier(cellId) as? CBRecommendADCell
        if nil == cell {
            cell = NSBundle.mainBundle().loadNibNamed("CBRecommendADCell", owner: nil, options: nil).last as? CBRecommendADCell
        }
        
        //显示数据
        cell?.bannerArray = model.data?.banner
        
        //点击事件
        //MARK: -   5   C    闭包 的 传递
        cell?.clickClosure = cellClosure
        
        return cell!
    }
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    
}

//MARK: UIScrollView代理
extension CBRecommendADCell: UIScrollViewDelegate {
    
    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        
        let index = Int(scrollView.contentOffset.x/scrollView.bounds.size.width)
        pageCtrl.currentPage = index
        
    }
    
}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容