啊.......项目终于写完了!
继续学习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)
}
}
输出结果:
黑色
❤️
❤️
❤️
❤️
❤️
❤️
❤️❤️❤️❤️❤️❤️❤️
❤️❤️❤️❤️❤️❤️❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️&&&&&&&&&❤️
❤️❤️❤️❤️❤️❤️❤️
❤️&&&&&&&&&&❤️
&❤️&&&&&&&&❤️
&&❤️&&&&&&❤️
&&&❤️&&&&❤️
&&&&❤️&&❤️
&&&&&❤️❤️
&&&&&&❤️
❤️❤️❤️❤️❤️❤️❤️
❤️
❤️
❤️❤️❤️❤️❤️❤️❤️
❤️
❤️
❤️❤️❤️❤️❤️❤️❤️