Compare commits

...

2 Commits

Author SHA1 Message Date
fish 255f171aa8 编辑页键盘增加完成按钮 2026-07-16 21:19:29 +08:00
fish 70870e1ec2 编辑页增加键盘遮挡处理 2026-07-16 21:13:52 +08:00
+52
View File
@@ -29,6 +29,41 @@ class ClipEditViewController: UIViewController {
setupNavigationBar()
setupTextView()
setupKeyboardObservers()
}
deinit {
NotificationCenter.default.removeObserver(self)
}
private func setupKeyboardObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc private func keyboardWillShow(_ notification: Notification) {
guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
let keyboardFrameInView = view.convert(keyboardFrame, from: nil)
let intersection = keyboardFrameInView.intersection(view.bounds)
let keyboardHeight = intersection.height
let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 0.25
UIView.animate(withDuration: duration, delay: 0, options: .beginFromCurrentState) {
self.textView.contentInset.bottom = keyboardHeight
self.textView.verticalScrollIndicatorInsets.bottom = keyboardHeight
self.view.layoutIfNeeded()
}
}
@objc private func keyboardWillHide(_ notification: Notification) {
let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval ?? 0.25
UIView.animate(withDuration: duration, delay: 0, options: .beginFromCurrentState) {
self.textView.contentInset.bottom = 0
self.textView.verticalScrollIndicatorInsets.bottom = 0
self.view.layoutIfNeeded()
}
}
override func viewDidAppear(_ animated: Bool) {
@@ -59,6 +94,7 @@ class ClipEditViewController: UIViewController {
textView.font = UIFont.preferredFont(forTextStyle: .body)
textView.textContainerInset = UIEdgeInsets(top: 12, left: 12, bottom: 12, right: 12)
textView.text = clip.text
textView.inputAccessoryView = createInputAccessoryView()
view.addSubview(textView)
let safeArea = view.safeAreaLayoutGuide
@@ -70,6 +106,22 @@ class ClipEditViewController: UIViewController {
])
}
private func createInputAccessoryView() -> UIToolbar {
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 44))
toolbar.barStyle = .default
toolbar.isTranslucent = true
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "完成", style: .done, target: self, action: #selector(didTapKeyboardDoneButton))
toolbar.items = [flexSpace, doneButton]
toolbar.sizeToFit()
return toolbar
}
@objc private func didTapKeyboardDoneButton() {
textView.resignFirstResponder()
}
@objc private func didTapSaveButton() {
let updatedText = textView.text ?? ""
guard !updatedText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else {