我用UISearchController
和UITableView
创建了一个视图控制器。从搜索范围按钮中可以选择两种不同的搜索:组和人员。这两种搜索都有效并在表中显示结果。但是,如果单击每个单元格,它们应将您引导到不同的动态页(动态群组页面或动态个人资料页面)。群组页面可以使用,而个人资料页面则不行。这意味着每当我点击搜索结果中的个人单元格时,没有任何React,并且控制台上显示以下警告:
Warning: Attempt to present <MyProject.profileView: 0x13e9df000> on <MyProject.SearchPage: 0x142a1d8f0> which is already presenting <UISearchController: 0x142a1f7c0>
如果你知道为什么会发生这种事......如果你能让我知道,我会非常感激。
EDIT:下面是将单元格链接到不同视图控制器的函数:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if self.searchForGroups {
let detailCell:PFObject = self.filteredGroups.objectAtIndex(indexPath.row) as! PFObject
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("DynamicCellView") as! DynamicCellView
vc.GroupId = detailCell.objectId!
self.presentViewController(vc, animated: false, completion: nil)
}else{
//Link to use profile
let user = self.peopleResults[indexPath.row]
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("ProfileView") as! profileView
vc.profileId = user.objectId!
self.presentViewController(vc, animated: true, completion: nil)
}
}
6条答案
按热度按时间gwo2fgha1#
我有同样的警告,这为我修复了它。你需要停止显示搜索控制器,这样你就可以在离开视图时显示其他控制器。
s2j5cfk02#
我正在计算同样的原始问题,这一切都没有解决它为我。
实际上,您只需要关闭*UISearchController**,因为它已经呈现给当前视图。
所以,当你想发起你的行动时,你只需要调用这个:
希望这会有所帮助!
ltqd579y3#
我在点击搜索结果时尝试执行segue时遇到了同样的错误。这不是一个理想的解决方案,但在执行segue之前关闭searchController为我解决了这个问题:
0mkxixxg4#
我不确定上述答案在以前的版本中是否正常工作,但在swift 5中,调用dislose将导致segue正常触发,但搜索栏将保持活动状态,当他们关闭触发的segue(返回搜索页面)时,搜索栏将看起来活动,但结果将不活动。
同样,从viewDidDisappear()中删除也不能正常工作。下面是我的操作。
qmb5sa225#
解除UISearchController(在本主题中以十几种不同的方式提出)是一个可行的解决方案。
在具有UISearchController的视图控制器的 viewDidLoad() 中。此变通方法的优点在于,当您向后导航时,UISearchController仍显示搜索结果。
zmeyuzjn6#
没有代码是很难帮助你的。这个错误可能是因为你破坏了视图控制器的层次结构而发生的。
该消息指出您有3个视图控制器:
请记住,视图控制器一次只能显示一个视图控制器,但它可以有多个子视图控制器(如导航控制器)。
有关详细信息,请查看:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/TheViewControllerHierarchy.html#//apple_ref/doc/uid/TP40007457-CH33-SW1
作为一个注解,以大写字母(“ProfileView”而不是“profileView ")作为类名的开头是一个很好的编码习惯。