在 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游记