美文网首页
UITextField/UITextView处理

UITextField/UITextView处理

作者: 独孤流 | 来源:发表于2023-03-12 10:56 被阅读0次

1、RxSwift对于UITextField的text的变化

通过代码赋值而不是通过输入的值,不会响应的处理方案
参考:RxSwift设置 UITextField文本订阅未响应

// UITextField.rx.text对于文本改变输出是通过事件(action contro)来的,
// 而赋值方式,并没有触发任何 action,所以可以通过手动发送一个 action解决。
textField.text = "修改文本"
textField.sendActions(for: .allEditingEvents)

2、UITextField输入限制

参考:UITextfield常用输入限制

2、controller里的页面自动在点击非UITextField或UITextView时关闭键盘

方案一、使用成熟的IQKeyboardManager框架
方案二、自定义一个简单的view
参考:iOS | 事件传递及响应链
iOS 的响应链小结

import UIKit
import RxCocoa
import RxSwift

class BaseAutoHideKeyboardView: UIView {
    typealias BaseAutoHideKeyboardBlock = () -> Void
    var hitBlock: BaseAutoHideKeyboardBlock?
    var autoHideKeyboard: Bool = true
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let testView = super.hitTest(point, with: event)
        if autoHideKeyboard == true, testView != nil {
            if let _ = testView as? UITextField  {
                
            } else if let _ = testView as? UITextView  {
                
            } else {
                hitBlock?()
            }
            
        }
        return testView
    }
}
class BaseScrollViewController: UIViewController {
    let disposeBag = DisposeBag()
    // MARK: 字View
    lazy var baseScrollView: UIScrollView = {
        let scrollView = UIScrollView()
        // 拖拽时自动隐藏键盘
        scrollView.keyboardDismissMode = .onDrag
        return scrollView
    }()
    lazy var baseContentView = BaseHideKeyboardView().then {
        $0.hitBlock = {[weak self] in
            self?.view.endEditing(true)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }
    
    // MARK: - override
    func setupUI() {
        view.insertSubview(baseScrollView, at: 0)
        
        baseScrollView.snp.makeConstraints { make in
            make.top.equalTo(84)
            make.left.right.bottom.equalToSuperview()
        }

        baseScrollView.addSubview(baseContentView)
        baseContentView.snp.makeConstraints { make in
            make.width.equalTo(view)
            make.top.bottom.equalToSuperview()
            make.height.greaterThanOrEqualTo(UIScreen.main.bounds.size.height-84)
        }
    }
}

相关文章

网友评论

      本文标题:UITextField/UITextView处理

      本文链接:https://www.haomeiwen.com/subject/bsvfrdtx.html