Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >RxSwift -在UISearchBar中以编程方式触发搜索

RxSwift -在UISearchBar中以编程方式触发搜索
EN

Stack Overflow用户
提问于 2017-11-19 22:55:49
回答 3查看 6K关注 0票数 4

当用户输入一些文本时,我正在观察UISearchBar.rx.text属性以执行一些与搜索相关的操作。但在某些时候,我也想以编程方式触发此搜索操作。例如,在创建视图时,不幸的是“搜索...”不打印文本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {
  @IBOutlet weak var mySearchBar: UISearchBar!

  let disposeBag = DisposeBag()

  override func viewDidLoad() {
    super.viewDidLoad()
    // Trigger search when text changes
    mySearchBar.rx.text.subscribe(onNext: { (text)
         print("Searching for \(text)...")
         // do some search Action
    }
    .disposed(by: disposeBag)

    // Programmatically trigger a search
    mySearchBar.text = "Some text to search"
  }

}

问题是更改mySearchBar.text不会触发新的rx.text事件。有什么方法可以做到这一点吗?

例如,多亏了this post,我知道使用UITextField,使用UITextField.sendActions( For:.ValueChanged)函数是可能的。对于UISearchBar,有没有类似的方法呢?

EN

回答 3

Stack Overflow用户

发布于 2017-11-20 00:40:10

您可以使用Variable<String?>作为搜索栏更新的接收器。这样,您还可以通过编程方式设置它的值,并使用变量而不是直接使用搜索栏来驱动您的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ViewController: UIViewController {
    let searchText = Variable<String?>(nil)
    let searchBar = UISearchBar()
    let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()
        searchBar.rx.text.asDriver()
            .drive(searchText)
            .disposed(by: disposeBag)

        searchText.asObservable().subscribe(onNext: { [weak self] (text) in
            if let welf = self, welf.searchBar.text != text {
                welf.searchBar.text = text
            }
        })
            .disposed(by: disposeBag)

        searchText.value = "variables so cool"
        searchText.asObservable().subscribe(onNext: { [weak self] (text) in
            self?.doStuff(text)
        })
        .disposed(by: disposeBag)
    }
}
票数 5
EN

Stack Overflow用户

发布于 2019-05-14 06:18:08

这是Driver的一个简单用法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import UIKit
import RxCocoa
import RxSwift
class SearchViewController: UIViewController {

    @IBOutlet weak var searchBar: UISearchBar!
    let disposeBag = DisposeBag()
    override func viewDidLoad() {
        super.viewDidLoad()
        let dataModels = Driver.just(["David", "Behrad","Tony","Carl","Davidov"])
        let searchingTextDriver = searchBar.rx.text.orEmpty.asDriver()
        let matchedCases = searchingTextDriver.withLatestFrom(dataModels){ searchingItem,models in
            return models.filter({ (item) -> Bool in
                 return item.contains(searchingItem)
            })
        }
        matchedCases.do(onNext: { (items) in
            print(items)            
        }).drive().disposed(by: disposeBag)
    }
}

如您所见,我们创建了一个dataModels驱动程序,它可能是您的网络或dataBase获取的响应。将搜索到的文本转换为Driver,然后与dataModels混合创建matchedCases

票数 1
EN

Stack Overflow用户

发布于 2019-05-14 14:53:33

是的,同样适用于UITextBar

以编程方式设置.text 不会自动触发操作,我不知道为什么!但这也是UITextField的情况。

每次更新UIView子类的.text属性后调用sendActions

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Programmatically trigger a search
    mySearchBar.text = "Some text to search"    
    mySearchBar.sendActions(for: .valueChanged)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47382906

复制
相关文章
js将内容复制到剪贴板
在js中通过点击事件来触发复制到剪贴板,通过js的document.execCommand("Copy");语法可以实现复制功能,但是首先需要将文本选中,来看一下实际代码:
OECOM
2020/07/01
4K0
js修改复制到剪贴板的内容
MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/copy_event
阿超
2022/08/21
5K0
通过js实现复制到剪贴板功能
<input type="text" id="content" value=""/> <button type="button" onClick="copyUrl2()">复制短链接</button> <script> function copyUrl2(){ var urlresult=document.getElementById("content"); urlresult.select(); // 选择对象 document.execCommand("Copy"); // 执行
雨尘
2018/07/17
2.8K0
通过js实现复制到剪贴板功能
<input type="text" id="content" value=""/> <button type="button" onClick="copyUrl2()">复制短链接</button> <script> function copyUrl2(){ var urlresult=document.getElementById("content"); urlresult.select(); // 选择对象 document.execCommand("Copy"); // 执行
Youngxj
2018/06/06
2.6K0
使用ZeroClipboard解决跨浏览器复制到剪贴板的问题
Zero Clipboard的实现原理 Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板。 Zero Clipboard的安装方法 首先需要下载 Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js 和 ZeroClipboard.swf 放入到你的项目中。 然后把在你要使用复制功能的页面中引入Zero Clipbo
磊哥
2018/05/08
1.6K0
使用 JS 剪贴板 API
使用 JS 剪贴板 API 现在的状况 一般情况下我们会在网页上使用大量的3复制粘贴的操作。 但是也可以看到在 360文库中的禁止复制粘贴或者知乎的那样复制粘贴的时候会自动带有一段文字的版权声明。 C
西南_张家辉
2021/02/02
4.3K0
20 行 JS 代码,实现复制到剪贴板功能
转自:20 行 JS 代码,实现复制到剪贴板功能 HTML <div class="rui-upload-btn rui-btng" data-copytarget="#rui-base64-result" id="copy-text-btn">复制</div> <div class="rui-base64-box"> <textarea name="rui-base64-result" id="rui-base64-result">data:image/png;base64,iVBORw0KGgo
Rattenking
2021/02/01
1.9K0
VBA代码:处理剪贴板
在VBE中,插入一个类模块,并将其重命名为“ClipBoard”,输入下面的代码:
fanjy
2023/10/04
9110
VBA代码:处理剪贴板
JavaScript操作剪贴板
在网页中一般是不允许访问剪贴板内容的,因为这样存在着很大的安全隐患。在IE和FireFox中剪贴板的访问是可控的,但是在Opera、Chrome、Safari浏览器中是不允许访问的,这样就产生了浏览器兼容的问题。
恋喵大鲤鱼
2018/08/03
3.1K0
Word VBA技术:使用VBA操控剪贴板
很简单的一些代码,可能不太常用,所以不会太关注。然而,一旦遇到要使用的情形时,如果了解,就能马上拿来使用。因此,收集在这里备用,也希望能够给有兴趣的朋友提供参考。
fanjy
2023/02/16
2.5K0
python 多重剪贴板 脚本
该程序将利用一个关键字保存每段剪贴板文本。例如,当运行py mcb.pyw save spam,剪贴板中当前的内容就用关键字spam 保存。通过运行py mcb.pyw spam,这 段文本稍后将重新加载到剪贴板中。如果用户忘记了都有哪些关键字,他们可以运 行py mcb.pyw list,将所有关键字的列表复制到剪贴板中。 如果使用Windows,可以创建一个名为mcb.bat 的批处理文件,很容易地通 过“Run…”窗口运行这个脚本。该批处理文件包含如下内容: @pyw.exe C:\Python34\mcb.pyw %*
用户5760343
2022/05/13
6940
剪贴板——客户端存储
WEB应用程序可以通过处理这些事件,与其他WEB应用程序以及客户端本地应用程序进行数据交换。
Html5知典
2019/11/26
2K0
通过JS实现剪贴板操作
在网上找到很多种方法,ZeroClipboard.js、clipboard.js 插件等,但是都没有办法解决本人项目中的问题,最后发现可以通过 navigator 对象得到 clipboard,进行剪切板操作
赤蓝紫
2023/01/02
2.7K0
通过JS实现剪贴板操作
使用Zero Clipboard实现JS网页代码复制到剪贴板功能,所有浏览器全兼容
前几天,好友让我帮忙增加一个复制二维码链接的功能,虽然说这个功能在很多网站都能看到,但是你会经常看到“此功能不支持该浏览器,请手工复制文本框中内容”,这是因为大都用“window.clipboardData”来实现,但这个函数只有IE和Firefox火狐浏览器支持。
崔文远TroyCui
2019/02/26
1.9K0
Javascript Tip(1) 操作剪贴板
javascript可以轻松操作客户端剪贴板内容,不过只适用IE5以上浏览器javascript可JavaScript
Java架构师必看
2021/03/22
6410
剪贴板被占用导致应用使用剪贴板拷贝内容失败抛出 COMException 0x800401D0 错误
本文记录某些软件,例如 向日葵远程控制 软件占用剪贴板,导致 WPF 应用使用剪贴板拷贝内容和设置剪贴板时,抛出 System.Runtime.InteropServices.COMException (0x800401D0): OpenClipboard 失败 (0x800401D0 (CLIPBRD_E_CANT_OPEN)) 异常
林德熙
2023/04/07
1.7K0
剪贴板操作 Clipboard API 教程
一般来说,脚本不应该改动用户的剪贴板,以免不符合用户的预期。但是,有些时候这样做确实能够带来方便,比如"一键复制"功能,用户点击一下按钮,指定的内容就自动进入剪贴板。
ruanyf
2021/01/21
2.2K0
Android 系统剪贴板的使用 - 复制、获取和清空
ClipboardManager: 表示一个剪贴板 ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目) ClipData.Item: 剪贴数据集中的一个数据条目 复制内容 /** * 实现文本复制功能 * * @param content 复制的文本 */ public static void copy(String content) { if (!TextUtils.isEmpty(content)) { // 得到剪贴板管理器
Jingbin
2019/04/25
6.2K0
Android 系统剪贴板的使用 - 复制、获取和清空
ClipboardManager: 表示一个剪贴板 ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目) ClipData.Item: 剪贴数据集中的一个数据条目 复制内容 /** * 实现文本复制功能 * * @param content 复制的文本 */ public static void copy(String content) { if (!TextUtils.isEmpty(content)) { // 得到剪贴板管理器
Jingbin
2019/05/08
1.7K0
知乎剪贴板的小细节
今天发现知乎的剪贴板运用的非常好,粘贴图片的话会上传,这个在很多地方已经有了,如果是粘贴的是一个链接,知乎还会将链接自动的替换为链接的标题,下面是知乎的一段js:
前Thoughtworks-杨焱
2021/12/08
4550
知乎剪贴板的小细节

相似问题

正常选择速度快于计数(*)

36

为什么发射速度快于反射

17

为什么减少的速度快于sum或sumBy?

25

为什么在我的情况下线程速度快于任务

10

为什么Eclipse的加载速度要快于Can皮?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文