| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- //
- // RealNamePopupView.swift
- // RoderickRalph
- //
- // Created by Neoa on 2025/8/20.
- //
- import Foundation
- import UIKit
- class RealNamePopupView: UIView, UITextFieldDelegate{
- // MARK: - UI Components
- private let backgroundView: UIView = {
- let view = UIView()
- view.backgroundColor = UIColor.black.withAlphaComponent(0.5) // Semi-transparent gray background
- view.translatesAutoresizingMaskIntoConstraints = false
- return view
- }()
-
- private let popupBackgroundImageView: UIImageView = {
- let imageView = UIImageView()
- imageView.image = UIImage(named: "pqan335") // Background image for the pop-up
- imageView.contentMode = .scaleToFill
- imageView.translatesAutoresizingMaskIntoConstraints = false
- return imageView
- }()
- private let titleButton: UIButton = {
- let button = UIButton(type: .system)
- button.setBackgroundImage(UIImage(named: "pqan333"), for: .normal)
- button.setTitle("实名认证", for: .normal)
- button.setTitleColor(.white, for: .normal)
- button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 18)
- button.translatesAutoresizingMaskIntoConstraints = false
- return button
- }()
- private let detailLabel: UILabel = {
- let label = UILabel()
- label.text = "根据国家相关法规规定,请使用有效身份证进行实名认证。(该信息仅用于实名登记,不会向任何第三方泄露)"
- label.font = UIFont.systemFont(ofSize: 11)
- label.textColor = .white
- label.numberOfLines = 0
- label.translatesAutoresizingMaskIntoConstraints = false
- return label
- }()
- private let nameLabel: UILabel = {
- let label = UILabel()
- label.text = "姓 名"
- label.font = UIFont.systemFont(ofSize: 12)
- label.textColor = .white
- label.translatesAutoresizingMaskIntoConstraints = false
- return label
- }()
-
- private let nameTextField: UITextField = {
- let textField = UITextField()
- textField.placeholder = "请输入真实姓名"
- textField.font = UIFont.systemFont(ofSize: 14)
- textField.borderStyle = .roundedRect
- textField.translatesAutoresizingMaskIntoConstraints = false
- return textField
- }()
-
- private let idLabel: UILabel = {
- let label = UILabel()
- label.text = "身份证号"
- label.font = UIFont.systemFont(ofSize: 12)
- label.textColor = .white
- label.translatesAutoresizingMaskIntoConstraints = false
- return label
- }()
- private let idNumberTextField: UITextField = {
- let textField = UITextField()
- textField.placeholder = "请输入有效的身份证号"
- textField.font = UIFont.systemFont(ofSize: 14)
- textField.borderStyle = .roundedRect
- textField.translatesAutoresizingMaskIntoConstraints = false
- return textField
- }()
- private let confirmButton: UIButton = {
- let button = UIButton(type: .system)
-
- button.setBackgroundImage(UIImage(named: "tqan323"), for: .normal)
- button.setTitle("认证", for: .normal)
- button.setTitleColor(.white, for: .normal)
- button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 20)
- button.contentHorizontalAlignment = .center
- button.translatesAutoresizingMaskIntoConstraints = false
- return button
- }()
-
- private let closeButton: UIButton = {
- let button = UIButton(type: .custom)
- button.setImage(UIImage(named: "pqan334"), for: .normal)
- button.addTarget(self, action: #selector(closePopup), for: .touchUpInside)
- button.translatesAutoresizingMaskIntoConstraints = false
- return button
- }()
- // MARK: - Initialization
- init() {
- super.init(frame: .zero)
- setupUI()
- setupConstraints()
- setupKeyboardDismissal() // Set up keyboard dismissal
- }
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- // MARK: - UI Setup
- private func setupUI() {
- addSubview(backgroundView)
- addSubview(popupBackgroundImageView)
- addSubview(titleButton)
- addSubview(detailLabel)
- addSubview(nameLabel)
- addSubview(nameTextField)
- addSubview(idLabel)
- addSubview(idNumberTextField)
- addSubview(confirmButton)
- addSubview(closeButton)
- // If you want the dimmed background to also close the popup, uncomment below:
- // let tapGesture = UITapGestureRecognizer(target: self, action: #selector(closePopup))
- // backgroundView.addGestureRecognizer(tapGesture)
-
- nameTextField.delegate = self
- idNumberTextField.delegate = self
- confirmButton.addTarget(self, action: #selector(confirmButtonTapped), for: .touchUpInside)
- }
- private func setupConstraints() {
- NSLayoutConstraint.activate([
- // Background view
- backgroundView.topAnchor.constraint(equalTo: topAnchor),
- backgroundView.bottomAnchor.constraint(equalTo: bottomAnchor),
- backgroundView.leadingAnchor.constraint(equalTo: leadingAnchor),
- backgroundView.trailingAnchor.constraint(equalTo: trailingAnchor),
- popupBackgroundImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
- popupBackgroundImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
- popupBackgroundImageView.widthAnchor.constraint(equalToConstant: 333),
- popupBackgroundImageView.heightAnchor.constraint(equalToConstant: 266),
- titleButton.topAnchor.constraint(equalTo: popupBackgroundImageView.topAnchor, constant: 10),
- titleButton.centerXAnchor.constraint(equalTo: popupBackgroundImageView.centerXAnchor, constant: 0),
- titleButton.widthAnchor.constraint(equalToConstant: 132),
- titleButton.heightAnchor.constraint(equalToConstant: 37),
-
- detailLabel.topAnchor.constraint(equalTo: titleButton.bottomAnchor, constant: 14),
- detailLabel.centerXAnchor.constraint(equalTo: popupBackgroundImageView.centerXAnchor, constant: 0),
- detailLabel.leadingAnchor.constraint(equalTo: popupBackgroundImageView.leadingAnchor, constant: 35),
- detailLabel.trailingAnchor.constraint(equalTo: popupBackgroundImageView.trailingAnchor, constant: -35),
- nameTextField.topAnchor.constraint(equalTo: detailLabel.bottomAnchor, constant: 17),
- nameTextField.trailingAnchor.constraint(equalTo: popupBackgroundImageView.trailingAnchor, constant: -30),
- nameTextField.widthAnchor.constraint(equalToConstant: 204),
- nameTextField.heightAnchor.constraint(equalToConstant: 24),
- nameLabel.centerYAnchor.constraint(equalTo: nameTextField.centerYAnchor, constant: 0),
- nameLabel.trailingAnchor.constraint(equalTo: nameTextField.leadingAnchor, constant: -11),
- idNumberTextField.topAnchor.constraint(equalTo: nameTextField.bottomAnchor, constant: 8),
- idNumberTextField.trailingAnchor.constraint(equalTo: nameTextField.trailingAnchor, constant: 0),
- idNumberTextField.widthAnchor.constraint(equalToConstant: 204),
- idNumberTextField.heightAnchor.constraint(equalToConstant: 24),
- idLabel.centerYAnchor.constraint(equalTo: idNumberTextField.centerYAnchor, constant: 0),
- idLabel.trailingAnchor.constraint(equalTo: idNumberTextField.leadingAnchor, constant: -11),
-
- confirmButton.topAnchor.constraint(equalTo: idNumberTextField.bottomAnchor, constant: 20),
- confirmButton.centerXAnchor.constraint(equalTo: centerXAnchor, constant: 0),
- confirmButton.widthAnchor.constraint(equalToConstant: 211),
- confirmButton.heightAnchor.constraint(equalToConstant: 42),
- closeButton.topAnchor.constraint(equalTo: popupBackgroundImageView.topAnchor, constant: -12),
- closeButton.trailingAnchor.constraint(equalTo: popupBackgroundImageView.trailingAnchor, constant: 12),
- closeButton.widthAnchor.constraint(equalToConstant: 24),
- closeButton.heightAnchor.constraint(equalToConstant: 24),
- ])
- }
- // MARK: - Actions
- @objc private func closePopup() {
- removeFromSuperview()
- }
-
- @objc private func confirmButtonTapped() {
- // Perform validation checks
- if nameTextField.text?.isEmpty ?? true {
- showToast(message: "姓名不能为空")
- } else if idNumberTextField.text?.isEmpty ?? true {
- showToast(message: "身份证号不能为空")
- } else {
- // Show success message
- showToast(message: "认证成功")
- }
- }
-
- // MARK: - Keyboard Dismissal
- private func setupKeyboardDismissal() {
- // Tap gesture to dismiss keyboard when tapping outside the text fields
- let tapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
- self.addGestureRecognizer(tapGesture)
- }
- @objc private func dismissKeyboard() {
- nameTextField.resignFirstResponder()
- idNumberTextField.resignFirstResponder()
- }
- // MARK: - UITextFieldDelegate
- func textFieldShouldReturn(_ textField: UITextField) -> Bool {
- // Dismiss the keyboard when the return key is pressed
- textField.resignFirstResponder()
- return true
- }
- // 通用 Toast
- private func showToast(message: String) {
- let toastLabel = UILabel()
- toastLabel.text = message
- toastLabel.font = UIFont.systemFont(ofSize: 14)
- toastLabel.textColor = .white
- toastLabel.backgroundColor = UIColor.black.withAlphaComponent(0.7)
- toastLabel.textAlignment = .center
- toastLabel.alpha = 0.0
- toastLabel.layer.cornerRadius = 8
- toastLabel.clipsToBounds = true
- toastLabel.translatesAutoresizingMaskIntoConstraints = false
- addSubview(toastLabel)
- NSLayoutConstraint.activate([
- toastLabel.centerXAnchor.constraint(equalTo: centerXAnchor),
- toastLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
- toastLabel.widthAnchor.constraint(equalToConstant: 160),
- toastLabel.heightAnchor.constraint(equalToConstant: 40)
- ])
- UIView.animate(withDuration: 0.3) {
- toastLabel.alpha = 1.0
- } completion: { _ in
- DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
- UIView.animate(withDuration: 0.3) {
- toastLabel.alpha = 0.0
- } completion: { _ in
- toastLabel.removeFromSuperview()
- }
- }
- }
- }
- }
|