在 UISearchDisplayController 中选择一行后返回 UISearchDisplayController 会导致奇怪的行为

Posted

技术标签:

【中文标题】在 UISearchDisplayController 中选择一行后返回 UISearchDisplayController 会导致奇怪的行为【英文标题】:Returning to UISearchDisplayController after selecting a row in UISearchDisplayController results in strange behavior 【发布时间】:2014-08-17 18:16:57 【问题描述】:

我正在 XCode 5.1.1 中为 ios 7 创建一个应用程序,该应用程序使用一个表格视图控制器,其结果按与用户的距离过滤(现在的默认行为)。我添加了搜索功能,它工作正常,但它不会使用我的自定义 UITableViewCell (不是我需要帮助的问题,但我提到它可能与我当前的问题有关)。

当我在普通表格视图中选择一行并转到详细信息屏幕并返回时,一切正常。当我在搜索显示控制器中搜索并选择一行时,它会转到正确的详细信息屏幕,但是当我返回搜索结果时,它会在底部添加一行,该行通常会出现在常规表格视图中。每次我在搜索结果中选择一行,segue,然后返回搜索结果屏幕,底部就会添加另一行。这些行是可选择的,但不执行转场。以下是一些有助于澄清问题的图片:

常规表格视图行


选择行后的详细视图


详细视图返回后的tableview


搜索栏激活


搜索“the”后返回搜索结果但不使用自定义tableviewcell


选择搜索结果后显示正确的详细视图


从detail view返回到searchdisplaycontroller显示搜索结果,但是它们被推上去,隐藏了搜索栏,结果下方增加了两行空,后面是属于常规tableview的一行(它使用自定义 tableviewcell 显示)


选择另一个搜索结果会显示正确的详细信息视图


从详细视图返回到searchdisplaycontroller显示搜索结果,但是往上推多了,隐藏了搜索栏和顶部搜索结果,结果下面加了两行空,后面是属于的两行常规表格视图(使用自定义表格视图单元显示)


【问题讨论】:

【参考方案1】:

听起来您在某处有一个方法,最初将搜索栏滚动到屏幕外,每次返回负责搜索显示控制器的视图控制器时,都会重复调用该方法,将表格视图滚动得越来越高(可能通过 viewWillAppear 或 viewDidAppear)。

如果是这种情况,您可以检查搜索显示控制器的状态,并仅在它未处于活动状态时执行该方法,例如:

if (!self.searchDisplayController.isActive) 
    // safe to scroll off-screen

虽然没有看到您的代码,但很难诊断。

【讨论】:

你完全正确!我已经添加了该代码(确切地说是您的代码!)并发现这是导致问题的原因。我已经删除了隐藏搜索栏的代码,并打算稍后再尝试解决如何解决问题。感谢您的帮助!

以上是关于在 UISearchDisplayController 中选择一行后返回 UISearchDisplayController 会导致奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

分配的变量引用在哪里,在堆栈中还是在堆中?

NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效