closuresUIImagePickerController也会closures呈现视图控制器

我正在使用tabbar系统的项目。 其中一个tabbar项是JobPostingViewController。 我将它embedded到UINavigationController中。 在这个视图控制器中有一个名为add new job的UIButton。我实现了pushviewcontroller去CreateJobPostViewController。 在那里我需要添加UIImagePickerController来select图像。 当我点击完成button或从库中select一个图像,它解雇了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) } 

添加select器作为子视图

尝试添加imagepicker作为子视图到您的CreateJobPostViewController insted呈现它,然后将其从代理中的父级中删除

 @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 over currentcontext选项,如编辑取消select,

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

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

通过将图像select器的modalPresentationStyle设置为“OverCurrentContext”来解决问题:

 picker.modalPresentationStyle = .overCurrentContext 

你可以使用:

 picker.modalPresentationStyle = .overCurrentContext 

但取决于你的屏幕布局,最好使用:

 picker.modalPresentationStyle = .overFullScreen 

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