声明组件
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.abcview)
}
private lazy var abcview:UIView = {
let abcview=UIView();
abcview.backgroundColor=UIColor.red
abcview.frame=CGRect(x: 100, y: 100, width: 100, height: 100)
return abcview
}()
新建子组件
class MyLoginIconView: LPBaseView {
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(self.iconImageView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
self.iconImageView.frame=CGRect(x: 100, y: 100, width: 100, height: 100);
}
private lazy var iconImageView:UIImageView = {
let iconImageView = UIImageView();
iconImageView.backgroundColor=UIColor.red
return iconImageView
}()
}
自定义构造方法
var isShowRight: Bool?
override init(frame: CGRect) {
super.init(frame: frame) // 65
}
// 自定义构造方法
convenience init(isShowRight: Bool) {
self.init()
self.isShowRight = isShowRight
self.addSubViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
声明协议
@objc protocol MyLoginViewDelegate {
// 忘记密码
func forgetPsdAction()
// 登录
func loginAction()
// 验证码登录/注册
func phoneCodeAction()
}
在ViewCtroller中实现协议方法
extension MyLoginViewController : MyLoginViewDelegate {
func loginAction() {
}
func forgetPsdAction() {
}
func phoneCodeAction() {
}
}
声明block
//定义一个block
typealias blocktype = (_ text:String)->Void
// 声明block
var block:blocktype?
if block != nil{
block!("block传的值")
self.phoneView.block = {(text:String) in
self.message.text = text
}
UIButton 添加点击事件
forgetBtn.addTarget(self, action:#selector(forgetPsdAction), for: UIControlEvents.touchUpInside)
@objc private func forgetPsdAction() {
}
swift block循环引用
使用 weakSelf
weak var weakSelf = self
self.phoneView.textChangeBlock = {(text:String) in
weakSelf.userName = text
}
简便写法
self.phoneView.textChangeBlock = {[weak self](text:String) in
let strongSelf = self
strongSelf?.userName = text
}
在 swift 中,要解除闭包的 循环引用,可以在闭包定义中使用 [unowned self] 或者 [weak self],其中:
[unowned self] 类似与 OC 中的 unsafe_unretained,如果对象被释放,仍然保留一个 无效引用,不是可选项
[weak self] 类似与 OC 中的 __weak,如果对象被释放,自动指向 nil,更安全
[weak self] 时时监控性能较差,[unowned self]可能导致野指针错误,如果能够确定对象不会被释放,尽量使用 unowned
监听输入框值得变化
textField.addTarget(self, action: #selector(textChangeActon), for: .allEditingEvents)
网友评论