关闭 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
我正在做一个使用标签栏系统的项目。 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