基本上我有标签栏控制器有两个标签,每个标签都有一个单独的导航控制器,每个控制器都有几个视图(见下文)。
在“顶部”导航控制器(保存在右侧选项卡中)中,我可以选择一个图像,然后将其带到最右边的屏幕以预览图像......
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
let previewController = self.storyboard?.instantiateViewController(withIdentifier: "previewVC") as! PreviewViewController
previewController.img = image
previewController.navigationItem.setHidesBackButton(true, animated: false)
self.navigationController?.pushViewController(previewController, animated: true)
self.dismiss(animated: true, completion: nil)
}
}
...点击“发布”。这会上传图片并调用self.tabBarController?.selectedIndex = 0
只需将我带到图像Feed,它位于“底部”导航控制器(左侧标签)中。到现在为止还挺好。但是,当我需要在发布后显示上传屏幕时,预览屏幕仍显示在“右侧”选项卡中。
如果我点击帖子时拨打self.dismiss(animated: true, completion: nil)
,整个导航控制器都会被解除,我会被带回登录界面。
所以我试图关闭预览控制器,以便上传控制器在右侧选项卡中显示为默认视图,而不会忽略该导航控制器中的整个堆栈。
我该怎么做?
答案 0 :(得分:2)
如果使用navigation controllers将视图控制器添加到导航堆栈(推送),则可以通过调用pop函数将其删除。当您以模态方式呈现视图控制器时,可以调用dismiss来删除视图控制器。
答案 1 :(得分:0)
委托函数为您提供(图像选取器)视图控制器,您应该忽略它,而不是作为委托的视图控制器(通常是呈现视图控制器)。也许尝试这样的事情:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
let previewController = self.storyboard?.instantiateViewController(withIdentifier: "previewVC") as! PreviewViewController
previewController.img = image
previewController.navigationItem.setHidesBackButton(true, animated: false)
self.navigationController?.pushViewController(previewController, animated: true)
picker.dismiss(animated: true, completion: nil)
}
}