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

san*_*t05 9 iphone objective-c uiimagepickercontroller ios swift

我正在开发一个使用tabbar系统的项目.tabbar项目之一是JobPostingViewController.我将它嵌入UINavigationController中.在这个视图控制器中有一个名为add new job的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)
}
Run Code Online (Sandbox Code Playgroud)

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)
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*rma 19

修复了将图像选择器的modalPresentationStyle设置为"OverCurrentContext"的问题:

picker.modalPresentationStyle = .overCurrentContext
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的方法。接受的答案是 Hacky 答案。 (2认同)

Ans*_*eed 8

添加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!)
}
Run Code Online (Sandbox Code Playgroud)

然后

 func imagePickerControllerDidCancel(picker: UIImagePickerController) {

    picker.view!.removeFromSuperview()
    picker.removeFromParentViewController()
    }
Run Code Online (Sandbox Code Playgroud)

用于呈现

通过currentcontext显示选择器,例如编辑取消选择,

picker.modalPresentationStyle = .overCurrentContext 在展示之前使用//

 presentViewController(picker, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以使用:

picker.modalPresentationStyle = .overCurrentContext
Run Code Online (Sandbox Code Playgroud)

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

picker.modalPresentationStyle = .overFullScreen
Run Code Online (Sandbox Code Playgroud)

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