Files
note/Note/FormatNoteViewController.swift
T

144 lines
5.3 KiB
Swift

//
// FormatNoteViewController.swift
// Note
//
// Created by fish on 2026/7/12.
//
import UIKit
class FormatNoteViewController: UIViewController {
private var textView: UITextView!
private var iCloudButton: UIButton!
private var noteButton: UIButton!
private var doneButton: UIBarButtonItem!
private var pasteButton: UIBarButtonItem!
private var resetButton: UIBarButtonItem!
private var rightBarButtonMode: RightBarButtonMode = .paste
private enum RightBarButtonMode {
case paste
case reset
}
override func viewDidLoad() {
super.viewDidLoad()
title = "格式化笔记"
navigationItem.largeTitleDisplayMode = .never
view.backgroundColor = .systemGroupedBackground
setupUI()
}
private func setupUI() {
textView = UITextView()
textView.translatesAutoresizingMaskIntoConstraints = false
textView.backgroundColor = .systemBackground
textView.layer.cornerRadius = 12
textView.layer.masksToBounds = true
textView.font = UIFont.preferredFont(forTextStyle: .body)
textView.textContainerInset = UIEdgeInsets(top: 12, left: 12, bottom: 12, right: 12)
textView.isEditable = true
textView.delegate = self
view.addSubview(textView)
doneButton = UIBarButtonItem(title: "完成", style: .plain, target: self, action: #selector(didTapDoneButton))
pasteButton = UIBarButtonItem(title: "粘贴文案", style: .plain, target: self, action: #selector(didTapPasteButton))
resetButton = UIBarButtonItem(title: "重置", style: .plain, target: self, action: #selector(didTapResetButton))
updateRightBarButtonItem()
iCloudButton = createBottomButton(title: "iCloud 格式化", color: .systemBlue)
iCloudButton.addTarget(self, action: #selector(didTapiCloudButton), for: .touchUpInside)
view.addSubview(iCloudButton)
noteButton = createBottomButton(title: "Note 格式化", color: .systemGreen)
noteButton.addTarget(self, action: #selector(didTapNoteButton), for: .touchUpInside)
view.addSubview(noteButton)
let safeArea = view.safeAreaLayoutGuide
let buttonHeight: CGFloat = 52
let spacing: CGFloat = 16
NSLayoutConstraint.activate([
textView.topAnchor.constraint(equalTo: safeArea.topAnchor, constant: spacing),
textView.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor, constant: spacing),
textView.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor, constant: -spacing),
iCloudButton.topAnchor.constraint(equalTo: textView.bottomAnchor, constant: spacing),
iCloudButton.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor, constant: spacing),
iCloudButton.trailingAnchor.constraint(equalTo: safeArea.centerXAnchor, constant: -spacing / 2),
iCloudButton.heightAnchor.constraint(equalToConstant: buttonHeight),
iCloudButton.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor, constant: -spacing),
noteButton.topAnchor.constraint(equalTo: textView.bottomAnchor, constant: spacing),
noteButton.leadingAnchor.constraint(equalTo: safeArea.centerXAnchor, constant: spacing / 2),
noteButton.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor, constant: -spacing),
noteButton.heightAnchor.constraint(equalToConstant: buttonHeight),
noteButton.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor, constant: -spacing)
])
}
private func createBottomButton(title: String, color: UIColor) -> UIButton {
var config = UIButton.Configuration.filled()
config.title = title
config.baseBackgroundColor = color
config.baseForegroundColor = .white
config.cornerStyle = .medium
config.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 16)
let button = UIButton(configuration: config)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}
@objc private func didTapDoneButton() {
textView.resignFirstResponder()
}
@objc private func didTapPasteButton() {
if let string = UIPasteboard.general.string {
textView.text = string
}
}
@objc private func didTapResetButton() {
textView.text = ""
rightBarButtonMode = .paste
updateRightBarButtonItem()
}
private func updateRightBarButtonItem() {
if textView.isFirstResponder {
navigationItem.rightBarButtonItem = doneButton
} else {
switch rightBarButtonMode {
case .paste:
navigationItem.rightBarButtonItem = pasteButton
case .reset:
navigationItem.rightBarButtonItem = resetButton
}
}
}
@objc private func didTapiCloudButton() {
rightBarButtonMode = .reset
updateRightBarButtonItem()
}
@objc private func didTapNoteButton() {
rightBarButtonMode = .reset
updateRightBarButtonItem()
}
}
extension FormatNoteViewController: UITextViewDelegate {
func textViewDidBeginEditing(_ textView: UITextView) {
updateRightBarButtonItem()
}
func textViewDidEndEditing(_ textView: UITextView) {
updateRightBarButtonItem()
}
}