第二天2018-08-26

啊.......项目终于写完了!
继续学习switf
这么多天过去了
我的顺序都混乱了
好了
废话就不多说了
这次就先写个自定义UIView吧
1.新建一个类
2.继承UIView
3.实现init方法
4.配置UIView

import UIKit

class switfView: UIView {

    ///var(创建)一个UILabel
    var lab:UILabel?
    ///var(创建)一个UIButton
    var btn:UIButton?
    ///实现init方法()
    override init(frame: CGRect) {
        super.init(frame: frame)
        ///创建子试图的方法
        createUI()
    }
    ///创建子试图
    func createUI(){
        
        /**
         UILabel
         1、实例化
         2、设置属性
         3、添加视图
         */
        lab = UILabel()
        
        lab?.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
        lab?.backgroundColor = UIColor.red
        lab?.text = "我是switf"
        lab?.textColor = UIColor.black
        
        self.addSubview(lab!)
        
        /**
         UIButton
         1、实例化
         2、设置属性
         3、添加视图
         */
        btn = UIButton(type: .custom)
        
        btn?.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
        btn?.backgroundColor = UIColor.green
        btn?.setTitle("黑色", for: .normal)
        btn?.setTitle("红色", for: .selected)
        btn?.setTitleColor(UIColor.black, for: .normal)
        btn?.setTitleColor(UIColor.red, for: .selected)
        
        btn?.addTarget(self, action: #selector(btnAction(sender:)), for: .touchUpInside)
        
        self.addSubview(btn!)
    }
    //给btn添加按钮方法
    @objc func btnAction(sender:UIButton) {
        sender.isSelected = !sender.isSelected;
    }
    ///layoutSubviews方法重新布局
    override func layoutSubviews() {
        super.layoutSubviews()
        
        ///重新布局lab
        lab?.frame = CGRect(x: 0, y: 0, width: 100, height: 30);
        
        ///重新布局btn
        btn?.frame = CGRect(x: 0, y: 30, width: 100, height: 30)
        
    }
    //init方法后必须带的,意思是没有init编码器尚未实现
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

到这之后我们就完成了自定义的view
如果想要自定义其他的东西参考此用法
因为switf没有.h文件
所以就可以直接使用这个类
也就好比switf把所有的.h文件都放到.pch文件里了
下面我们在viewDidLoad()这个方法中调用这个类

let switfV = switfView(frame: CGRect(x: 0, y: 100, width: 200, height: 400))
switfV.backgroundColor = UIColor.orange
self.view.addSubview(switfV)

这就完成了!!!
上面写了btn添加了按钮和方法
那就在说一下方法的回调吧
一共有四种
1单例
2.代理
3.闭包
4.通知

在这我就写一下第二种吧(代理)
我们都知道代理在OC中用到的比较频繁
也相对比较严谨
首先要创建协议代理

import UIKit
//创建协议代理
protocol switfViewdelegates :NSObjectProtocol{
    //协议方法
    func btnFunc(btnStr:String)

}

//在这个类里面创建协议对象

class switfView: UIView {
    //var 协议对象
    var delegates:switfViewdelegates?
    //在刚才的点击方法中加入协议方法
    @objc func btnAction(sender:UIButton) {
        //传入的是按钮的title
        delegates?.btnFunc(btnStr: (sender.titleLabel?.text)!)
    }
}

然后回到需要调用到这个协议的类里面
在继承类的后面加这个协议名以“,“隔开

class ViewController: UIViewController ,switfViewdelegates{
    override func viewDidLoad() {
        //绑定协议
        switfV.delegates = self as?headerViewdelegates
    }
     //调用协议方法
     func btnFunc(btnStr: String) {
        print(btnStr)
    }
}

输出结果:
黑色

❤️
❤️
❤️
❤️
❤️
❤️
❤️❤️❤️❤️❤️❤️❤️

❤️❤️❤️❤️❤️❤️❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️❤️❤️❤️❤️❤️❤️

❤️&&&&&&&&&&❤️
&❤️&&&&&&&&❤️
&&❤️&&&&&&❤️
&&&❤️&&&&❤️
&&&&❤️&&❤️
&&&&&❤️❤️
&&&&&&❤️

❤️❤️❤️❤️❤️❤️❤️
❤️
❤️
❤️❤️❤️❤️❤️❤️❤️
❤️
❤️
❤️❤️❤️❤️❤️❤️❤️

你可能感兴趣的:(第二天2018-08-26)