警告:尝试在*上呈现View Controller,它已经呈现

我用UISearchControllerUITableView创建了一个视图控制器。 您可以从搜索范围按钮中选择两种不同类型的搜索:组和人员。 两种搜索都可以在桌面上显示并显示结果。 但是,如果单击每个单元格,则应将它们定向到不同的动态页面(动态组页面或动态人员概要页面)。 用于组的工作,而用于配置文件的工作不工作。 这意味着每当我从结果中点击一个人单元格时,没有任何反应,我在控制台上打印出以下警告:

 Warning: Attempt to present  on  which is already presenting  

如果您知道为什么会发生这种情况,如果您能让我知道,我们将非常感激。

编辑:这是应该将单元格链接到不同视图控制器的function:

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

我正在收到同样的警告,并为我解决了这个问题。 您需要停止显示搜索控制器,以便在离开视图时显示其他控制器。

  override func viewDidDisappear(_ animated: Bool) { if SearchController.isActive == true { SearchController.isActive = false } } 

我正在想出同样的原始问题,但这一切都没有为我解决。

实际上你只需要解雇 UISearchController ,因为它已经呈现给当前视图。

因此,当您想要启动操作时,您只需要调用此方法:

 if searchController.isActive { self.searchController.dismiss(animated: false) { // Do what you want here like perform segue or present } } 

希望这会有所帮助!

没有代码有点难以帮助你。 可能会发生该错误,因为您正在破坏视图控制器层次结构。

消息是说您有3个视图控制器:

  SearchPage is presenting UISearchController profileView is not yet presented but should be presented on UISearchController or should replace it (For that UISearchController should be dismissed first) 

请记住,视图控制器当时只能显示1个视图控制器,但它可以有多个子视图控制器(例如导航控制器)。

有关详细信息,请查看: https : //developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/TheViewControllerHierarchy.html#//apple_ref/doc/uid/TP40007457-CH33-SW1

就像评论一样,它是一个很好的编码实践,用大写字母开始你的类名(’ProfileView’而不是’profileView’)

在点击搜索结果时尝试执行segue时遇到了同样的错误。 这不是一个理想的解决方法,但在执行segue之前解雇searchController为我修复了它:

  self.searchController.dismiss(animated: false) { self.performSegue(withIdentifier: "", sender: cell) }