解散UIImagePickerController也会解散呈现视图控制器

时间:2016-07-03 05:27:37

标签: ios objective-c iphone swift uiimagepickercontroller

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

你可以在这里看到问题:
enter image description here

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

5 个答案:

答案 0 :(得分:18)

通过将图像选择器的modalPresentationStyle设置为“OverCurrentContext”来修复此问题:

picker.modalPresentationStyle = .overCurrentContext

答案 1 :(得分:7)

将Picker添加为子视图

尝试将imagepicker作为子视图添加到您的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)

答案 2 :(得分:6)

您可以使用:

picker.modalPresentationStyle = .overCurrentContext

但根据您的屏幕布局,最好使用:

picker.modalPresentationStyle = .overFullScreen

否则您的“取消”,“重拍”和“使用照片”按钮可能不可见。

答案 3 :(得分:0)

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

1 - 转到故事板,ViewController在哪里,选择它

Select ViewController

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

Set current context

注意:如果它不适用于当前上下文,请选择Over Current Context

答案 4 :(得分:0)

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

picker.modalPresentationStyle = .popover