Advance UIKit rewrite with AMap integration and core UI modules.
Integrate高德 SDK with simulator-safe build flags, add map views for operating area and punch points, refactor main tabs and key feature screens to UIKit with Diffable lists, and document Swift concurrency defaults in AGENTS.md. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -25,6 +25,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
private let startDatePicker = UIDatePicker()
|
||||
private let endDatePicker = UIDatePicker()
|
||||
|
||||
/// 视图加载完成后的 UI 初始化与数据绑定。
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
title = "实名认证"
|
||||
@ -34,6 +35,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
Task { await loadInfo() }
|
||||
}
|
||||
|
||||
/// 初始化Form相关 UI 或状态。
|
||||
private func setupForm() {
|
||||
contentStack.axis = .vertical
|
||||
contentStack.spacing = 16
|
||||
@ -107,6 +109,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
contentStack.addArrangedSubview(submitButton)
|
||||
}
|
||||
|
||||
/// 创建SectionTitle实例。
|
||||
private func makeSectionTitle(_ text: String) -> UILabel {
|
||||
let label = UILabel()
|
||||
label.text = text
|
||||
@ -114,6 +117,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
return label
|
||||
}
|
||||
|
||||
/// labeled字段相关逻辑。
|
||||
private func labeledField(_ title: String, _ field: UITextField) -> UIStackView {
|
||||
let label = UILabel()
|
||||
label.text = title
|
||||
@ -125,6 +129,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
return stack
|
||||
}
|
||||
|
||||
/// apply视图模型相关逻辑。
|
||||
private func applyViewModel() {
|
||||
realNameField.text = viewModel.realName
|
||||
idCardField.text = viewModel.idCardNo
|
||||
@ -163,6 +168,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
/// 加载Info数据。
|
||||
private func loadInfo() async {
|
||||
do {
|
||||
try await appServices.globalLoading.withLoading(message: "加载中...") {
|
||||
@ -173,10 +179,12 @@ final class RealNameAuthViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
/// longValid变更相关逻辑。
|
||||
@objc private func longValidChanged() {
|
||||
viewModel.isLongValid = longValidSwitch.isOn
|
||||
}
|
||||
|
||||
/// 点击send验证码的处理逻辑。
|
||||
@objc private func sendCodeTapped() {
|
||||
Task {
|
||||
do {
|
||||
@ -187,6 +195,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
/// 提交Tapped。
|
||||
@objc private func submitTapped() {
|
||||
viewModel.realName = realNameField.text ?? ""
|
||||
viewModel.idCardNo = idCardField.text ?? ""
|
||||
@ -215,16 +224,19 @@ final class RealNameAuthViewController: UIViewController {
|
||||
|
||||
private var pendingSide: RealNameImageSide = .front
|
||||
|
||||
/// pickFront相关逻辑。
|
||||
@objc private func pickFront() {
|
||||
pendingSide = .front
|
||||
presentImagePicker()
|
||||
}
|
||||
|
||||
/// pickBack相关逻辑。
|
||||
@objc private func pickBack() {
|
||||
pendingSide = .back
|
||||
presentImagePicker()
|
||||
}
|
||||
|
||||
/// 弹出ImagePicker页面。
|
||||
private func presentImagePicker() {
|
||||
var config = PHPickerConfiguration()
|
||||
config.filter = .images
|
||||
@ -236,6 +248,7 @@ final class RealNameAuthViewController: UIViewController {
|
||||
}
|
||||
|
||||
extension RealNameAuthViewController: PHPickerViewControllerDelegate {
|
||||
/// picker 业务逻辑。
|
||||
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
|
||||
picker.dismiss(animated: true)
|
||||
guard let provider = results.first?.itemProvider, provider.canLoadObject(ofClass: UIImage.self) else { return }
|
||||
@ -253,6 +266,7 @@ extension RealNameAuthViewController: PHPickerViewControllerDelegate {
|
||||
}
|
||||
|
||||
private extension UILabel {
|
||||
/// 初始化实例。
|
||||
convenience init(text: String) {
|
||||
self.init()
|
||||
self.text = text
|
||||
|
||||
Reference in New Issue
Block a user