1、RxSwift对于UITextField的text的变化
通过代码赋值而不是通过输入的值,不会响应的处理方案
参考:RxSwift设置 UITextField文本订阅未响应
// UITextField.rx.text对于文本改变输出是通过事件(action contro)来的,
// 而赋值方式,并没有触发任何 action,所以可以通过手动发送一个 action解决。
textField.text = "修改文本"
textField.sendActions(for: .allEditingEvents)
2、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)
}
}
}
网友评论