完整版

作者: 吃土豆不吐葡萄皮 | 来源:发表于2016-05-07 10:05 被阅读26次
    
    
    //
    //  PicPickerViewController.swift
    //  DSWB
    //
    //  
    //
    
    import UIKit
    
    private let reuseIdentifier = "Cell"
    
    class PicPickerViewController: UICollectionViewController {
        // MARK:- 定义属性
        private lazy var images : [UIImage] = [UIImage]()
        
        // MARK:- 系统回调的函数
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // Register cell classes
            self.collectionView!.registerNib(UINib(nibName: "PicPickerViewCell", bundle: nil), forCellWithReuseIdentifier: reuseIdentifier)
        }
    }
    
    
    // MARK:- CollectioView的数据源方法
    extension PicPickerViewController {
        override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return images.count + 1
        }
        
        override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
            // 1.创建cell
            let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! PicPickerViewCell
            
            // 2.给cell设置数据
            cell.backgroundColor = UIColor.redColor()
            cell.image = indexPath.item <= images.count - 1 ? images[indexPath.item] : nil
            cell.delegate = self
            
            return cell
        }
    }
    
    
    // MARK:- Cell的代理方法
    extension PicPickerViewController : PicPickerViewCellDelegate {
        func addPhotoBtnClickForCell(cell: PicPickerViewCell) {
            // 1.判断照片源是否可用
            if !UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary) {
                return
            }
            
            // 2.创建照片选择控制器
            let ipc = UIImagePickerController()
            
            // 3.设置照片源
            ipc.sourceType = .PhotoLibrary
            
            // 4.设置代理
            ipc.delegate = self
            
            // 6.弹出控制器
            presentViewController(ipc, animated: true, completion: nil)
        }
        
        func removePhotoBtnClickForCell(cell: PicPickerViewCell) {
            // 1.获取删除的照片的下标值
            let indexPath = collectionView!.indexPathForCell(cell)!
            
            // 2.将照片从数组中删除
            images.removeAtIndex(indexPath.item)
            
            // 3.刷新表格
            collectionView?.reloadData()
        }
    }
    
    
    // MARK:- UIImagePickerController的代理方法
    extension PicPickerViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate {
        func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
            // 1.取出用户选择的image
            guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
                picker.dismissViewControllerAnimated(true, completion: nil)
                return
            }
            
            // 2.将图片放入到数组中
            images.append(image)
            
            // 3.刷新表格
            collectionView?.reloadData()
            
            // 4.退出照片选择控制器
            picker.dismissViewControllerAnimated(true, completion: nil)
        }
    }
    
    // MARK:- 自定义CollectionView的Layout
    class PicPickerCollectionViewLayout : UICollectionViewFlowLayout {
        override func prepareLayout() {
            super.prepareLayout()
            
            // 0.定义间距的常量
            let itemPadding : CGFloat = 15
            let itemWH = (UIScreen.mainScreen().bounds.width - 4 * itemPadding) / 3
            
            // 1.设置布局相关的属性
            itemSize = CGSize(width: itemWH, height: itemWH)
            minimumInteritemSpacing = itemPadding
            minimumLineSpacing = itemPadding
            
            // 2.设置collectionView相关的属性
            collectionView?.contentInset = UIEdgeInsets(top: itemPadding, left: itemPadding, bottom: itemPadding, right: itemPadding)
        }
    }
    
    
    //  PicPickerViewCell.swift
    //  DSWB
    //
    
    
    import UIKit
    
    @objc
    protocol PicPickerViewCellDelegate : NSObjectProtocol {
        optional func addPhotoBtnClickForCell(cell : PicPickerViewCell)
        optional func removePhotoBtnClickForCell(cell : PicPickerViewCell)
    }
    
    class PicPickerViewCell: UICollectionViewCell {
        // MARK:- 控件的属性
        @IBOutlet weak var addPhotoBtn: UIButton!
        @IBOutlet weak var removePhotoBtn: UIButton!
        
        // MARK:- 定义属性
        var delegate : PicPickerViewCellDelegate?
        var image : UIImage? {
            didSet {
                if image != nil {
                    addPhotoBtn.setBackgroundImage(image, forState: .Normal)
                    addPhotoBtn.userInteractionEnabled = false
                    removePhotoBtn.hidden = false
                } else {
                    addPhotoBtn.setBackgroundImage(UIImage(named: "compose_pic_add"), forState: .Normal)
                    addPhotoBtn.userInteractionEnabled = true
                    removePhotoBtn.hidden = true
                }
            }
        }
        
        // MARK:- 事件监听
        @IBAction func addPhotoBtnClick() {
            if delegate?.respondsToSelector("addPhotoBtnClickForCell:") != nil {
                delegate?.addPhotoBtnClickForCell!(self)
            }
        }
        
        @IBAction func removePhotoBtnClick() {
            if delegate?.respondsToSelector("removePhotoBtnClickForCell:") != nil {
                delegate?.removePhotoBtnClickForCell!(self)
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:完整版

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