小编Tin*_*ong的帖子

简单的 Swift 组合订阅 textDidChangeNotification

我在订阅 UITextField textDidChangeNotification 时无法使用最简单的组合模式实现。

import UIKit
import Combine

class ViewController: UIViewController {

    let textField = UITextField()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(textField)
        textField.frame = CGRect(x: 100, y: 0, width: view.frame.width, height: 100)
        textField.placeholder = "Search"

        let sub = NotificationCenter.default.publisher(for: UITextField.textDidChangeNotification, object: textField)
            .sink { (notification) in
                print("123")
        }
    }

}

Run Code Online (Sandbox Code Playgroud)

我一定遗漏了一些非常简单的东西,但是这个基本模式完全是从文档和其他教程中复制的。

谢谢您的帮助。

frp swift combine

3
推荐指数
1
解决办法
716
查看次数

keyboardFrameEndUserInfoKey 没有显示正确的值?

我的视图底部有一个文本输入字段,我正在尝试向上和向下设置动画以保持在键盘顶部。

func setupKeyboardObservers() {
    NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardWillChangeFrame), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)

    NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)

    NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardWillChangeFrame), name: UIResponder.keyboardWillHideNotification, object: nil)
}

@objc func handleKeyboardWillChangeFrame(notification: NSNotification) {

    let keyboardFrame = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
    let keyboardDuration = (notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double)

    print(keyboardFrame)
    orderDetailView?.textInputViewBottomAnchor?.constant = -keyboardFrame!.height
    UIView.animate(withDuration: keyboardDuration!) {
        self.view.layoutIfNeeded()
    }
}
Run Code Online (Sandbox Code Playgroud)

OrderDetailView 是视图控制器的视图。

textinputview 是动画的部分,当键盘第一次出现时它可以正常工作,但是当我发送消息并且键盘退出第一响应者时不会动画回来,也不是我通过在键盘外单击来退出第一响应者。

当我从 keyboardFrameEndUserInfoKey 打印 cgrect 值时,它返回与键盘存在时相同的帧值(而不是 0)。

当我从视图中向下拖动键盘时,这似乎只能正常工作。

谢谢你的帮助。

uitextfield ios swift

2
推荐指数
1
解决办法
1962
查看次数

标签 统计

swift ×2

combine ×1

frp ×1

ios ×1

uitextfield ×1