美文网首页
Swift代理传值,和闭包传值

Swift代理传值,和闭包传值

作者: 幻想综合症患者 | 来源:发表于2017-02-08 17:08 被阅读46次

    A-B 然后 B 将值传给A ,A是一个CollectionView B改变A的个数
    oc中如果不能访问在 protocol 上面添加@objc
    A代码
    import UIKit
    class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource,SecondVCDelegate {
    @IBOutlet weak var collectionView : UICollectionView?
    var count = 5;
    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return count;
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCollectionViewCell", forIndexPath: indexPath)
        
        return cell;
    }
    
    
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat{
        return 5;
    }
    
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat{
        return 5;
    }
    

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize{
    return CGSizeMake((UIScreen.mainScreen().bounds.size.width-15)/3, (UIScreen.mainScreen().bounds.size.width-15)/3);
    }

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        let secondVC = SecondViewController()
    

    // secondVC.delegate = self
    secondVC.myValue = {(count)->Void in
    self.count = count
    self.collectionView?.reloadData()
    }
    let nav_ctrl = UINavigationController.init(rootViewController: secondVC)
    self.presentViewController(nav_ctrl, animated: true) {

        }
    }
    
    func updateCount() {
        count = 20
        self.collectionView?.reloadData()
    }
    

    }

    B 代码:

    import UIKit
    protocol SecondVCDelegate {
    func updateCount();
    }

    typealias SendValue = (count:Int)->Void

    class SecondViewController: UIViewController {
    var delegate:SecondVCDelegate?
    var myValue:SendValue?
    override func viewDidLoad() {
    super.viewDidLoad()
    let backBtn = UIButton.init(frame: CGRectMake(0, 0, 60, 44))
    backBtn.setTitle("返回", forState: .Normal)
    backBtn.setTitleColor(UIColor.blueColor(), forState: .Normal)
    backBtn.addTarget(self, action: #selector(SecondViewController.back), forControlEvents: .TouchUpInside)
    let backItem = UIBarButtonItem.init(customView: backBtn)

        self.navigationItem.leftBarButtonItem = backItem
    }
    
    func back() {
        self.dismissViewControllerAnimated(true) {
            self.myValue!(count: 6)
    

    // self.delegate?.updateCount()
    }
    }
    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

    }

    相关文章

      网友评论

          本文标题:Swift代理传值,和闭包传值

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