UISableView单元上的ios – Peek和Pop在UISearchController中失败

UISableView单元上的ios – Peek和Pop在UISearchController中失败,第1张

概述Peek和Pop正在与UISearchController合作.但是,当您开始使用updateSearchResults搜索表时,Peek和Pop停止工作. 我扩展了苹果的Table Search with UISearchController demo,以支持Peek和Pop为例: 问题是当我开始搜索表格时,Peek和Pop不再工作了.它只是选择突出显示: 我做的更新是MainTableView Peek和Pop正在与UISearchController合作.但是,当您开始使用updateSearchResults搜索表时,Peek和Pop停止工作.

我扩展了苹果的Table Search with UISearchController demo,以支持Peek和Pop为例:

问题是当我开始搜索表格时,Peek和Pop不再工作了.它只是选择突出显示:

我做的更新是MaintableVIEwController是:

class MaintableVIEwController: BasetableVIEwController,UISearchbarDelegate,UISearchControllerDelegate,UISearchResultsUpdating {    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        ...        if traitCollection.forcetouchCapability == .available {            registerForPrevIEwing(with: self,sourceVIEw: tableVIEw)        }    }}extension MaintableVIEwController: UIVIEwControllerPrevIEwingDelegate {    func prevIEwingContext(_ prevIEwingContext: UIVIEwControllerPrevIEwing,vIEwControllerForLocation location: CGPoint) -> UIVIEwController? {        guard let indexPath = tableVIEw?.indexPathForRow(at: location),let cell = tableVIEw?.cellForRow(at: indexPath),let controller = storyboard?.instantiateVIEwController(withIDentifIEr: "DetailVIEwController") as? DetailVIEwController                else { return nil }        prevIEwingContext.sourceRect = cell.frame        controller.product = products[0]        return controller    }    func prevIEwingContext(_ prevIEwingContext: UIVIEwControllerPrevIEwing,commit vIEwControllerToCommit: UIVIEwController) {        guard let controller = vIEwControllerToCommit as? DetailVIEwController else { return }        controller.product = products[0]        show(controller,sender: self)    }}

搜索上下文控制器是否干扰窥探和流行(甚至可以是键盘)?我可以让它工作,当表最初的所有数据,但它不是一旦我开始使用搜索.我附上一个working sample here,如果你想运行它看到的问题.

解决方法 首先,在您的MaintableVIEwController.vIEwDIDLoad()中,您还需要注册您的resultstableController.tableVIEw,因为这是一个单独的视图,将会收到peek / pop信息:
if traitCollection.forcetouchCapability == .available {    prevIEwingContext = registerForPrevIEwing(with: self,sourceVIEw: tableVIEw)    if let resultVC = searchController.searchResultsController as? ResultstableController {        resultVC.registerForPrevIEwing(with: self,sourceVIEw: resultVC.tableVIEw)    }}

当测试这个解决方案时,我注意到一个奇怪的问题,结果集中的第一行不可窥视,结果集中的空白行WERE可以窥视.所以,在prevIEwingContext(_:vIEwControllerForLocation :)中的第二个修复:

func prevIEwingContext(_ prevIEwingContext: UIVIEwControllerPrevIEwing,vIEwControllerForLocation location: CGPoint) -> UIVIEwController? {    guard let tableVIEw = prevIEwingContext.sourceVIEw as? UItableVIEw,let indexPath = tableVIEw.indexPathForRow(at: location),

在您的原始代码中,它使用MaintableVIEwController上的tableVIEw属性,而不是作为交互的sourceVIEw的tableVIEw.

现在,当你正在搜索,当你不是这样的时候,这样做是有效的.但是,当您输入搜索,但尚未输入任何搜索文本时,UISearchController处于活动状态,但是UItableVIEw是MaintableVIEwController的UItableVIEw,您不能将视图注册为源视图两次.所以,我们还有更多的工作要做:

// local property to store the result from registerForPrevIEwing(with:sourceVIEw:)var prevIEwingContext: UIVIEwControllerPrevIEwing?func dIDPresentSearchController(_ searchController: UISearchController) {    if let context = prevIEwingContext {        unregisterForPrevIEwing(withContext: context)        prevIEwingContext = searchController.registerForPrevIEwing(with: self,sourceVIEw: tableVIEw)    }}func dIDdismissSearchController(_ searchController: UISearchController) {    if let context = prevIEwingContext {        searchController.unregisterForPrevIEwing(withContext: context)        prevIEwingContext = registerForPrevIEwing(with: self,sourceVIEw: tableVIEw)    }}

基本上,当UISearchController出现时,我们取消注册MaintableVIEwController并注册搜索控制器.当被驳回时,我们做相反的事情.

随着这些变化,偷窥和流行在三个州的工作.

总结

以上是内存溢出为你收集整理的UISableView单元上的ios – Peek和Pop在UISearchController中失败全部内容,希望文章能够帮你解决UISableView单元上的ios – Peek和Pop在UISearchController中失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存