警告:试图在已经呈现的*上显示*(null)
这是我第一个iOS应用程序。
所以我有UIVIewController
与UITableView
我集成了UISearchBar
和UISearchController
为了过滤TableCells显示
override func viewDidLoad() { menuBar.delegate = self table.dataSource = self table.delegate = self let nib = UINib(nibName: "ItemCellTableViewCell", bundle: nil) table.registerNib(nib, forCellReuseIdentifier: "Cell") let searchButton = UIBarButtonItem(barButtonSystemItem: .Search, target: self, action: "search:") menuBar.topItem?.leftBarButtonItem = searchButton self.resultSearchController = ({ let controller = UISearchController(searchResultsController: nil) controller.searchResultsUpdater = self controller.dimsBackgroundDuringPresentation = false return controller })() self.table.reloadData() }
我也使用模态segue为了打开元素的ViewController
,我将显示元素的细节。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { self.index = indexPath.row self.performSegueWithIdentifier("ItemDetailFromHome", sender: self) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "ItemDetailFromHome") { let settingsVC = segue.destinationViewController as! ItemDetailViewController settingsVC.parent = self if self.isSearching == true && self.searchText != nil && self.searchText != "" { settingsVC.item = self.filteredItems[self.index!] } else { settingsVC.item = self.items[self.index!] } } }
这工作正常,直到我尝试显示一个过滤元素的ItemDetailViewController
(通过UISearchController
)。
我有以下消息:
Warning: Attempt to present <ItemDetailViewController: *> on <HomeViewController: *> which is already presenting (null)
在每次我去ItemDetailViewController.viewDidLoad()
函数,但之后,当search被激活我有以前的错误。
任何想法 ? 我试图使用下面的asynchronous调度,但没有成功
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { self.index = indexPath.row dispatch_async(dispatch_get_main_queue(), { () -> Void in self.performSegueWithIdentifier("ItemDetailFromHome", sender: self) }) }
我find了一个解决scheme。
我已经在HomeViewController.viewDidLoad
添加以下代码,并且工作!
definesPresentationContext = true
在我的情况下,我发现我的代码呈现新的viewController( UIAlertController
)被调用两次。
在讨论definesPresentationContext
之前检查一下。
我面临同样的问题我所做的是从界面生成器中select我的segue它的types是“现在模态”,它的演示文稿是“Over current context”
我将演示文稿更改为“默认”,然后它为我工作。
这发生在我的项目上。 我是作为一个popup窗口来显示我们的login/注销ViewController
。 但是每当我尝试重新login并重新显示popup窗口时,我都会在控制台中看到这个消息:
Warning: Attempt to present UIViewController on <MY_HOME_VIEW_CONTROLLER> which is already presenting (null)
我的猜测是popup窗口仍然被我的ViewController
保持,即使它不可见。
但是,您正试图显示新的ViewController
,下面的代码,我用来解决这个问题应该为你工作:
func showLoginForm() { // Dismiss the Old if let presented = self.presentedViewController { presented.removeFromParentViewController() } // Present the New let storyboard = UIStoryboard(name: "MPTLogin", bundle: Bundle(for: MPTLogin.self)) let loginVC = storyboard.instantiateViewController(withIdentifier: "LogInViewController") as? MPTLogInViewController let loginNav = MPTLoginNav(rootViewController: loginVC!) loginNav.modalPresentationStyle = .pageSheet; self.present(loginNav, animated: true, completion: nil) }
- 如何在转换为video的同时对图像进行animation处理
- 重新定义目标操作方法的最安全的方法是什么,以便`UIButtons`将消息中继到我的`UIViewController`中的方法?
- 如何在ios中了解或关闭飞机模式
- CAShapeLayer上的渐变颜色效果
- 在UITableviewcell的ios 11 layoutsubview子视图中找不到UITableViewCellDeleteConfirmationView?
- uitableview重新sorting不起作用,源始终等于目的地
- iOS坐标系(三角函数)
- 双击家后,背景应用截图显示错误的方向
- 加载数据后立即显示tableView popover