This commit is contained in:
启星
2025-08-08 10:49:36 +08:00
parent 6400cf78bb
commit b5ce3d580a
8780 changed files with 978183 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
//
// ButtonItemView.swift
// TUIRoomKit
//
// Created by janejntang on 2023/1/10.
// Copyright © 2023 Tencent. All rights reserved.
//
import Foundation
class ButtonItemView: UIView {
var itemData: ButtonItemData
lazy var controlButton: UIButton = {
let button = UIButton()
button.backgroundColor = itemData.backgroundColor
if let cornerRadius = itemData.cornerRadius {
button.layer.cornerRadius = cornerRadius
}
return button
}()
lazy var label: UILabel = {
let label = UILabel()
label.textAlignment = isRTL ? .right : .left
label.font = itemData.titleFont ?? UIFont(name: "PingFangSC-Regular", size: 14)
label.textColor = itemData.titleColor ?? UIColor(0xD5E0F2)
label.adjustsFontSizeToFitWidth = true
return label
}()
lazy var imageView: UIImageView = {
let view = UIImageView()
return view
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(0x4F586B,alpha: 0.1)
view.isHidden = itemData.hasLineView ? false : true
return view
}()
// MARK: - initialized function
init(itemData: ButtonItemData) {
self.itemData = itemData
super.init(frame: .zero)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - view layout
private var isViewReady: Bool = false
override func didMoveToWindow() {
super.didMoveToWindow()
guard !isViewReady else { return }
constructViewHierarchy()
activateConstraints()
bindInteraction()
isViewReady = true
}
func constructViewHierarchy() {
addSubview(lineView)
addSubview(controlButton)
controlButton.addSubview(imageView)
controlButton.addSubview(label)
}
func activateConstraints() {
controlButton.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
imageView.snp.makeConstraints { make in
if let size = itemData.imageSize {
make.size.equalTo(size)
} else {
make.width.height.equalTo(20)
}
if itemData.orientation == .left {
make.leading.equalToSuperview()
} else {
make.trailing.equalToSuperview()
}
make.centerY.equalToSuperview()
}
label.snp.makeConstraints { make in
make.centerY.equalToSuperview()
if itemData.orientation == .left {
make.leading.equalTo(imageView.snp.trailing).offset(10)
} else {
make.trailing.equalTo(imageView.snp.leading).offset(-10)
}
}
lineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.leading.trailing.equalToSuperview()
make.height.equalTo(1.scale375())
}
}
func bindInteraction() {
setupViewState(item: itemData)
controlButton.addTarget(self, action: #selector(clickMenuButton(sender:)), for: .touchUpInside)
}
func setupViewState(item: ButtonItemData) {
itemData = item
controlButton.isSelected = item.isSelect
controlButton.isEnabled = item.isEnabled
imageView.image = item.isSelect ? itemData.selectedImage : itemData.normalImage
label.text = item.isSelect ? itemData.selectedTitle : itemData.normalTitle
}
@objc func clickMenuButton(sender: UIButton) {
itemData.action?(sender)
}
deinit {
debugPrint("deinit \(self)")
}
}