// // EmergencyContactView.swift // QuickLocation // // Created by 八条 on 2026/6/11. // import UIKit import RxSwift import RxCocoa class EmergencyContactView: UIView { var disposeBag = DisposeBag() private let footerView = EmergencyContactFooterView(frame: CGRectMake(0, 0, kScreenWidth, 131)) private func setupRx() { backBtn.rx.tap.subscribe(onNext: { _ in AppRouter.shared.popOrDismiss() }).disposed(by: disposeBag) } private func setupUI() { addSubview(navBgView) addSubview(navBarView) navBarView.addSubview(navTitleLabel) navBarView.addSubview(backBtn) addSubview(titleLab) addSubview(tableView) navBgView.layoutChain .edges(excludingEdge: .bottom) .heightToWidth(160/375) navBarView.layoutChain .edges(excludingEdge: .bottom) .height(kNaviHeight) navTitleLabel.layoutChain .top(kStatusBarHeight + 12) .centerY(backBtn) .centerX() backBtn.layoutChain .centerY(navTitleLabel) .left(15) .width(24) .height(24) titleLab.layoutChain .topToBottomOfView(navBarView, offset: 20) .left(15) tableView.layoutChain .topToBottomOfView(titleLab, offset: 16) .edgesHorzontal() .bottom(kSafeBottomMargin) } lazy var navBgView: UIImageView = { let iv = UIImageView() iv.image = UIImage(named: "Common/navBar_bg_2") iv.contentMode = .scaleAspectFill return iv }() lazy var navBarView: UIView = { let view = UIView() view.backgroundColor = .clear return view }() lazy var navTitleLabel: UILabel = { let label = UILabel() label.text = "紧急联系人" label.font = .systemFont(ofSize: 18, weight: .medium) label.textColor = ThemeManager.shared.color.titleAuxColor label.textAlignment = .center return label }() lazy var backBtn: UIButton = { let btn = UIButton(type: .custom) btn.setImage(UIImage(named: "Common/back"), for: .normal) btn.extendEdgeInsets = UIEdgeInsets(top: 54, left: 15, bottom: 100, right: 100) return btn }() lazy var titleLab: UILabel = { let label = UILabel() label.text = "我的紧急联系人(0人)" label.font = .systemFont(ofSize: 14, weight: .medium) label.textColor = ThemeManager.shared.color.titleAuxColor return label }() lazy var tableView: UITableView = { let tableView = UITableView(frame: .zero, style: .plain) tableView.backgroundColor = .clear tableView.separatorStyle = .none tableView.estimatedRowHeight = 68 tableView.bounces = false tableView.register(EmergencyContactCell.self) tableView.tableFooterView = footerView return tableView }() override init(frame: CGRect) { super.init(frame: .zero) backgroundColor = .white setupUI() setupRx() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } // MARK: - EmergencyContactCell class EmergencyContactCell: UITableViewCell { func configure(_ model: EmergencyContactModel) { nameLab.text = model.name phoneLab.text = model.phone } override init(style: CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) selectionStyle = .none backgroundColor = .clear setupSubviews() } private func setupSubviews() { contentView.addSubview(bgView) bgView.addSubview(phoneLab) bgView.addSubview(nameLab) bgView.addSubview(arrowIcon) bgView.layoutChain .edgesHorzontal(15) .edgesVertical() nameLab.layoutChain .top(13) .left(15) phoneLab.layoutChain .topToBottomOfView(nameLab, offset: 2) .leftToView(nameLab) arrowIcon.layoutChain .right(15) .width(13) .height(13) .centerY() } lazy var bgView: UIView = { let view = UIView() view.backgroundColor = UIColor(hexStr: "#F5FBFF") view.cornerRadius = 10 return view }() lazy var nameLab: UILabel = { let label = UILabel() label.textColor = ThemeManager.shared.color.titleAuxColor label.font = .systemFont(ofSize: 14, weight: .semibold) return label }() lazy var phoneLab: UILabel = { let label = UILabel() label.textColor = ThemeManager.shared.color.titleAuxColor label.font = .systemFont(ofSize: 14, weight: .semibold) return label }() lazy var arrowIcon: UIImageView = { let view = UIImageView(image: UIImage(named: "EmergencyContact/arrow")) return view }() required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } }