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

闭包的 声明与使用

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

一个视图控制器 上面 有 一个 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
        
    }
    
}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容