07.RxSwift textFiled和textView
2019-08-11 16:44
1546 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27811473/article/details/99196960
RxSwift textFiled和textView
1.测试代码override func viewDidLoad() { super.viewDidLoad() // 1: textFiled & textView来了 // 2: why 来两次 textFiled.rx.text.subscribe(onNext: { (text) in print("输入来了 \(text)") }) textView.rx.text.subscribe(onNext: { (text) in print("textView:输入来了 \(text)") }) // event textFiled.addTarget(self, action: #selector(textFiledChange), for: .allEditingEvents) } @objc func textFiledChange() { print("laile") } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { textFiled.text = "LiHua" //textFiled.sendActions(for: .allEditingEvents) textView.text = "LiMing" }
- 上面的代码会有两个问题:
- 当我执行
textFiled.text = "LiHua"
textView.text = "LiMing"
的时候,textFiled
不会打印,textView
会打印 - 当我点击输入框的时候会连续打印两次
一样的代码逻辑,一个走,一个不走
说明Rx内部两者封装的逻辑不一样
-
首先看
textView.text
,这里使用的是uses text storage notifications
储存通知
-
再看
textFiled.text
,这里用的是Events
,而这里只是个赋值
-
解决方法:
只要在赋值的时候设置:textFiled.sendActions(for: .allEditingEvents)
-
那why会走两次呢:
- 初始化序列的时候 -> 默认会发送一次
.onNext
,让信号成为热信号(激活) - 点击 ->
event
->edit begin
- 解决方法:加一个
skip(1)
即可,防止创建的时候默认调用一次
//加一个skip(1)即可,防止创建的时候默认调用一次 textFiled.rx.text.skip(1). subscribe(onNext: { (text) in print("输入来了 \(text)") })
TextFild 内部响应逻辑:
textFiled.addTarget(target, action: #selector(textFiledChange), for: .allEditingEvents)
target->
ControlTarget->响应
selector-->
callBack闭包
相关文章推荐
- android 设置textview划线效果
- TextView与EditText
- Android Vertical TextView 文字竖排
- 设置TextView属性中的字体大小 颜色 背景色
- 【自定义控件】自定义View实现TextView的简单功能
- android中TextView的文字实现动态效果,走马灯效果,闪烁效果
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- Textview解决换行混乱问题
- ListView中的CheckedTextView 多选/单
- android Textview 实现展开收缩功能(字符宽度)(StaticLayout)
- Android中TextView详解
- 【Android】一个TextView显示不同颜色字体
- TextView动态的显示$s$d
- DatePicker和DataPickerDialog以及AutoCompleteTextView的基本使用方法
- Android---10---TextView添加链接的两种方式
- android:TextView中的文本链接之--设置超链接、颜色、字体等属性
- 关于TextView.setTextColor(int); 括号里那个颜色int值的问题
- TextView 选择文字
- Android开发-CheckedTextView复选框居左文字居中-AndroidStudio
- 自定义Textview显示自动换行