UITableView 单元格上的 Peek 和 Pop 因 UISearchController 而失败

2024-01-01

Peek and Pop 正在与UISearchController。但是,一旦您开始使用以下命令搜索表,Peek 和 Pop 就会停止工作updateSearchResults.

I've extended Apple's Table Search with UISearchController demo https://developer.apple.com/library/content/samplecode/TableSearch_UISearchController/Introduction/Intro.html to support Peek and Pop as an example: enter image description here

Problem is when I start searching the table, Peek and Pop doesn't work anymore. It just select highlights it: enter image description here

我所做的更新是MainTableViewController are:

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)
    }
}

搜索上下文控制器是否干扰查看和弹出(甚至可能是键盘)?当表最初包含所有数据时,我可以让它工作,但一旦我开始使用搜索,它就不能工作。我附上了一个工作样本在这里 http://ge.tt/79P8imi2如果您想运行它并查看问题。


首先,在你的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)
    }
}

在测试这个解决方案时,我注意到一个奇怪的问题,结果集中的第一行不可查看,而结果集中的空白行是可查看的。所以,第二个修复previewingContext(_:viewControllerForLocation:):

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    guard let tableView = previewingContext.sourceView as? UITableView,
        let indexPath = tableView.indexPathForRow(at: location),

在您的原始代码中,它使用的是tableView财产在MainTableViewController而不是tableView那是sourceView用于交互。

现在,无论您在搜索还是不在搜索时,这都有效。但是,当您输入搜索但尚未输入任何搜索文本时,UISearchController是活跃的,但是UITableView是来自MainTableViewController, 你呢cannot将一个视图注册为源视图两次。所以,我们还有一些工作要做:

// 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并注册搜索控制器。当它被驳回时,我们做相反的事情。

通过这些更改,peek 和 pop 在所有三个状态下都可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITableView 单元格上的 Peek 和 Pop 因 UISearchController 而失败 的相关文章

  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • 寻找可靠的方法来选择iPhone 13微距相机设备

    我正在使用 objc 开发一个应用程序 我必须选择 iPhone 13 Pro 和 13 Pro Max 中配备的新微距摄像头 目前 我在所有其他设备上选择我的相机 并剪掉此代码 AVCaptureDeviceDiscoverySessio
  • 在 iOS 上构建 WebRtc

    我按照以下说明成功地在 MAC 上构建了 WebRTC http www webrtc org reference getting started http www webrtc org reference getting started
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • 为什么我需要 2 个或更多核心数据模型?

    我很想知道谁使用多个核心数据模型以及为什么 有什么好处 我正在开发一个应用程序 我认为我可以从多个模型中受益 但我不确定其他好处 我即将推出的应用程序将适用于 iPad 和 iPhone 的另一个版本 iPad 有 3 个主要内容 iPho
  • HttpClient setReachabilityStatusChangedBlock 声明没有接口

    尝试使用 AFNetworkings ReachabilityStatusChanged 但得到 HTTPCLIENT 没有可见的 interface 声明选择器 setReachabilityStatusChangeBlock 但Http
  • 如何在 iOS 中创建多行表格单元格?

    如何让第二个单元格扩展以适合文本而不是缩放文本 iOS 中有内置的方法可以做到这一点 还是我必须想出一些自制的解决方案 如果您查看 iOS 联系人应用程序 会发现有一个类似地址的框 但我找不到如何实现这一点 对于任何希望将来实现这一目标的人
  • 尽早检测有问题的 XIB 视图

    我的笔尖名称有一个拼写错误 当我推向导航控制器时 它在代码中被破坏了 弄清楚它并没有花太长时间 但我认为最好尽早断言格式良好 以便更容易弄清楚 问题是它不是零 它只是无法从笔尖正确地形成自己 在 initWithNib 之后是否有更好的断言
  • 将时间舍入到最接近的三十秒

    我有一个应用程序 它显示每 30 秒过期的数据 准确地说 在 h m s 11 30 00 11 30 30 11 31 00 等 我可以获得当前时间 但我不确定如何计算现在到最近的三十秒之间的时间 我发现的所有内容都是 Objective
  • 如何使用 SwiftUI 使按钮可拖动/可移动?

    我正在尝试使用 SwiftUI 制作一个可移动的按钮 从看起来这应该可行 我尝试将带有文本的按钮放入另一个 ZStack 中 有一秒钟它可以工作 但一旦我释放按钮 拖动就会停止 我无法再拖动 我注意到尽管按钮已经移动 但水龙头仍然位于中心
  • iOS9 Swift 文件使用 NSURL 创建 NSFileManager.createDirectoryAtPath

    在iOS9之前 我们创建了一个像这样的目录 let documentsPath NSSearchPathForDirectoriesInDomains DocumentDirectory UserDomainMask true 0 as S
  • iOS 中第一响应者的正式定义是什么?

    据我所知 第一响应者对象是根据输入活动等接收回调信号 并且它将沿着链向上冒泡 直到找到愿意处理它的响应者 但更正式地说 第一响应者的范围是什么 例如 它是应用程序范围的响应程序吗 似乎作为第一响应者只是说这个特定的对象将收到交互通知 其他响
  • 在 for 循环中为元组赋值

    struct MIDIPacket 中有一个 UInt8 的元组 正常的赋值是这样的 import CoreMIDI let packet MIDIPacket packet data 0 0x02 packet data 1 0x5f 等
  • Xcode 7.2 无法连接到装有 iOS 9.2 的 iPhone

    出于开发目的 我已经在我的 iPhone 5s 上安装了 iOS 9 2 beta 当然 我还安装了Xcode 7 2 beta 当我想在设备上运行应用程序扩展 键盘 时 该应用程序会正确构建 安装在 iPhone 上并启动 然而 然后我在
  • watchOS 2 上的最大内存使用量?

    我没有找到任何有关 watchOS 2 中应用程序可用内存使用的信息 我目前正在为 watchOS 开发一个应用程序 并且在手表端使用 Core Data 当我将 189 个对象中的 166 个加载到数组时 应用程序崩溃 此时的内存使用量为
  • Textview 中心文本对齐 IOS 7

    void observeValueForKeyPath NSString keyPath ofObject id object change NSDictionary change context void context NSLog He
  • iOS 上的推送通知渐进式 Web 应用程序

    我需要开发一个集成了推送通知的渐进式网络应用程序 在网上搜索我发现了关于这个主题的不同意见 如果我理解正确的话 目前我们无法在移动版 safari 中推送通知 但仅限桌面版 这样对吗 你有什么建议来获得相同的结果吗 我不是iOS专家 我想知
  • 为什么我收到 com.facebook.sdk.login 错误 308?

    我正在使用 Xcode 7 0 在 iOS 9 0 2 上进行测试并使用 Facebook SDK 4 7 0 当我登录用户时 大多数时候一切都正常 但有时我不断收到此错误 但我不知道为什么 操作无法完成 com facebook sdk
  • Xcode 中的 Prefix.pch 文件是什么?

    许多开发人员正在向其中添加各种方便的宏Prefix pch 但我的问题是那是什么Prefix pch file 如果我删除它Prefix pch来自我的文件Xcode 那么我的应用程序会运行吗 或者会显示什么错误吗 或者它会在构建过程中崩溃
  • 初始化Object中的空字符串?

    有人使用以下方法来初始化 NSstring NSString astring NSString alloc init 我想知道为什么不直接使用 NSString atring nil or NSString astring 没有semant

随机推荐

  • 流类型注释和有效的 JavaScript 源

    我正在使用 Facebook 的新 Flow Type 检查系统 In Flow 遇见 Underscore http flowtype org docs underscore html看来他们改变了这段 JavaScript 代码 var
  • 使用 Espresso 导航视图 Android Kotlin - androidx.test.espresso.NoMatchingViewException

    我是 Espresso 新手 试图编写 NavigationView 菜单项单击的测试用例 HomeActivityClass 中的以下方法 accountMenu is the NavigationView predefined clas
  • 如何将 for-each 循环应用于字符串中的每个字符?

    所以我想迭代字符串中的每个字符 所以我认为 for char c xyz 但我收到编译器错误 MyClass java 20 foreach not applicable to expression type 我怎样才能做到这一点 最简单的
  • C++ std::async 在主线程上运行

    有没有办法在主线程上运行函数 因此 如果我通过异步调用一个函数来下载文件 然后解析数据 然后它会调用一个回调函数 该函数将在我的主 UI 线程上运行并更新 UI 我知道默认 C 实现中的线程是相等的 因此我必须创建一个指向主线程的共享指针
  • 更改 PostgreSQL 数据库及其表的所有者的最佳方法?

    我正在尝试更改 PostgreSQL 数据库 版本 gt 8 2 及其表的所有者 我读过这个解决方案 在 PostgreSQL 中同时修改所有表的 OWNER https stackoverflow com questions 134812
  • gStreamer 视频录制内存泄漏

    您好 我正在尝试录制来自摄像机的 rtsp 流 H264 格式 我正在使用以下 gst 命令以 MPEG4 格式进行录制 gst launch e rtspsrc location rtsp 10 17 8 136 mediainput h
  • Pyrocms 模块或小部件或插件

    这让我抓狂 我想在网站主页上包含一个简单的联系表格 我无法确定是否需要构建模块 小部件或插件 他们似乎都不太正确 模块似乎只能作为独立页面工作 例如现有的联系人模块 小部件似乎只显示数据 从数据库或某种提要 例如 Twitter 获取 而插
  • Ajax 并返回由 PHP GD 创建的图像

    我有一个 PHP 脚本 可以使用 PHP GD 生成图像 生成图像后 将其保存 并在 Ajax 调用时发送以下输出 imagejpeg img data filename jpg echo img src filename jpg jpg
  • 如何对 PHP 应用程序进行负载平衡?

    我正在寻找有关如何对 php 应用程序进行负载平衡的指南 建议或示例 我的设置是 Ubuntu 10 04 和 PHP 5 3 我以前从未使用过负载平衡服务器 我正在寻找提供的任何帮助 Update 这是一个 Web 应用程序 预计将有数百
  • 如何使用 NodeJS imagemagick 库将 PDF 的第一页转换为 JPG?

    我正在尝试将 pdf 文件转换为预览图标 jpg 使用 NodeJS 的 imagemagick 库 我在尝试着 仅生成预览第一页 适用于多页 pdf 在普通的命令行 imagemagick 程序中 这可以是 很容易通过说 转换文件 pdf
  • java正则表达式键:值多行

    我有这样的文字 33 88 app 2 8 superman taman 蒲种 36100 马来西亚 22 布拉布拉 布拉 布拉布拉布拉 32 45 dsfd qdsfqsdf 72D Example 这个例子有一个形式 核心价值 值可以是
  • 从分组数据中选择两个随机且连续的行

    在下面的数据中 包括dput 我对三个人 IndIDII 进行了重复观察 纬度和经度 请注意 每个人都有不同数量的位置 并且它们是按以下顺序排列的 IndYear IndIDII IndYear WintLat WintLong 1 BHS
  • 一次将多个商品添加到 WooCommerce 购物车

    我有 3 个不同商品的 ID 我想将它们添加到购物车中 我可以用https url com shop cart add to cart 3001但是当我想添加 3 个项目时我却做不到 我可以添加任何功能 脚本来将此功能添加到我的购物网站吗
  • python中物理量的命名

    我想为我的模拟代码中使用的物理 数学量建立一个良好的命名方案 考虑以下示例 from math import class GaussianBeamIntensity object Optical intensity profile of a
  • 哪里可以获得适用于 Windows 的预编译 GTK3? [复制]

    这个问题在这里已经有答案了 有没有地方可以下载 Windows 版预编译的 GTK3 GTK 站点仅提供 2 22 版本的二进制文件 GTK for Windows 是由志愿者生成的 因此发布日期不同步 并且取决于开发人员的可用性 一旦完成
  • 寻找一种使用 Shapely 快速查找点所属多边形的方法

    我有一组约 36 000 个多边形 代表该国家 地区的一个分区 约县 我的 python 脚本接收很多点 pointId 经度 纬度 对于每个点 我想发回 pointId polygonId 对于每个点 循环到所有多边形并使用 myPoin
  • CSS 可以根据语言选择不同的默认字体和大小吗

    我有以下 CSS 片段 INPUT font family Raavi font size 14px 当文本框包含一些旁遮普文字时 效果很好 如下所示 但用户可能会输入英文 而我宁愿使用不同大小的 Verdana 字体 因为 Raavi 字
  • android:使用单个媒体播放器对象播放音频文件并显示图像

    我需要依次显示图像并播放相应的音频文件 我尝试创建多个媒体播放器对象 但它显示error 1 17 所以请帮助大家 我的时间不多了 现在我有一个处理程序 它播放音频文件 然后在播放另一个音频文件时获取该音频文件的持续时间 这是我的方法 但我
  • D3.js 中的树形图 x 和 y 属性从何而来?

    这是 JavaScript 代码 d3 json city json function error root var nodes cluster nodes root var links cluster links nodes consol
  • UITableView 单元格上的 Peek 和 Pop 因 UISearchController 而失败

    Peek and Pop 正在与UISearchController 但是 一旦您开始使用以下命令搜索表 Peek 和 Pop 就会停止工作updateSearchResults I ve extended Apple s Table Se