关闭 UIImagePickerController 也会关闭呈现的视图控制器

Dismissing of UIImagePickerController dismisses presenting view controller also

我正在做一个使用标签栏系统的项目。 tabbar 的一项是 JobPostingViewController。我将它嵌入到 UINavigationController 中。在这个视图控制器中有一个名为添加新作业的 UIButton。我实现了 pushviewcontroller 去 CreateJobPostViewController。我需要添加 UIImagePickerController 来选择图像。当我点击完成按钮或从库中选择图像时,它会关闭到 JobPostingViewController。但它应该转到 CreateJobPostViewController。 任何人都请帮助我。提前致谢。

您可以在此处查看问题:

JobPostingViewController 中的代码

 @IBAction func openCreateJob(sender: AnyObject) {
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier("CreateJobPostViewController") as! CreateJobPostViewController
    self.navigationController?.pushViewController(vc, animated: true)
}

CreateJobPostViewController 中的代码

   @IBAction func addImages(sender: AnyObject) {
    imagePicker.allowsEditing = false
    imagePicker.sourceType = .PhotoLibrary
    presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    picker.dismissViewControllerAnimated(true, completion: nil)
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    picker.dismissViewControllerAnimated(true, completion: nil)
}

添加选择器作为子视图

尝试将图像选择器作为子视图添加到您的 CreateJobPostViewController 中而不是呈现它,然后将其从委托中的父项中删除

@IBAction func openCreateJob(sender: AnyObject) {

var picker: UIImagePickerController = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = false
picker.sourceType = .PhotoLibrary
self.addChildViewController(picker)
picker.didMoveToParentViewController(self)
self.view!.addSubview(picker.view!)
}

然后

 func imagePickerControllerDidCancel(picker: UIImagePickerController) {

    picker.view!.removeFromSuperview()
    picker.removeFromParentViewController()
    }

供介绍

在当前上下文中显示带有编辑取消选择等选项的选择器,

使用picker.modalPresentationStyle = .overCurrentContext //在呈现之前 它

 presentViewController(picker, animated: true, completion: nil)

通过将图像选择器的 modalPresentationStyle 设置为 "OverCurrentContext":

解决了这个问题
picker.modalPresentationStyle = .overCurrentContext

您可以使用:

picker.modalPresentationStyle = .overCurrentContext

但根据您的屏幕布局,使用以下可能更好:

picker.modalPresentationStyle = .overFullScreen

否则您的 "cancel"、"retake" 和 "use photo" 按钮可能不可见。

我遇到了同样的问题,我使用故事板 (Xcode v9.2) 解决了它

1 - 转到故事板,你的 ViewController、select 在哪里

2 - 将演示文稿设置为:当前上下文

注意:如果当前上下文不起作用,select超过当前上下文

我试图在 一个 iOS 13 弹出窗口视图控制器上显示选择器。为了阻止相机关闭我的 popover 视图控制器,我必须将选择器的 modalPresentationStyle 更改为 popover。见下文:

picker.modalPresentationStyle = .popover