我们经常遇到这样一个场景:
自定义的View类中需要定义点击事件,跳转到新的视图控制器,而这时候就需要我们定义一个协议,让ViewController去实现对应的方法;
使用代理传值是我们常用的办法,同时我们还可以使用闭包,这样的写法更加简单直观,也更便于理解:
//
// ViewController.swift
// DemoLearn
//
// Created by LY on 2018/4/8.
// Copyright © 2018年 刘. All rights reserved.
//
import UIKit
//使用闭包传值
typealias MyBlock = (_ message:UIViewController)->(Void)
class mv:UIView{
var mb:MyBlock?
//假装我有一个button添加了点击事件
@objc func buttonClick(){
if mb != nil{
mb!(SecendViewController())
}
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let vv = mv()
self.view.addSubview(vv)
vv.mb = {(message:UIViewController)->(Void) in
self.present(message, animated: true, completion: nil)
}
// 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.
}
}
网友评论