【问题标题】:Dismissing a UIImagePicker关闭 UIImagePicker
【发布时间】:2016-08-09 21:46:05
【问题描述】:

我正在关闭我的 UIImagePicker 使用:

func imagePickerControllerDidCancel(picker: UIImagePickerController!)
     {
      picker.dismissViewControllerAnimated(true, completion: nil)
     }

不幸的是,这也消除了下面的视图。我不希望这种情况发生。

我已经像这样加载了 UIImagePicker:

let imagePicker: UIImagePickerController! = UIImagePickerController()


 @IBAction func uploadFromAlbumButton(sender : UIButton){
    let picker = UIImagePickerController()
    picker.allowsEditing = true
    picker.delegate = self
    presentViewController(picker, animated: true, completion: nil)
}

UIImagePicker 下的视图如下所示:

let newViewController = FulfilWishViewController();
newViewController.delegate = self
navigationController?.pushViewController(newViewController, animated: true)    

【问题讨论】:

  • 您能告诉我们您是如何在 ImagePicker 下显示视图的吗?
  • 所以你有 SomeParentViewController,它显示了 FulfilWishViewController。然后 FulfilWishViewController 调用 ImagePicker。当 ImagePicker 调用 imagePickerControllerDidCancel 时,它会自行关闭和 FulfilWishViewController。所以你只显示了 SomeParentViewController。对吗?
  • 没错,但是我希望它留在 FulfilWishViewController 而不是回到 SomeParentViewController

标签: ios swift uiimagepickercontroller viewcontroller


【解决方案1】:

请检查您是否在 viewwillappear() 中执行了任何代码。因为在解除 UIImagepickerController 之后,它会调用父控制器的 viewwillappear()。

【讨论】:

    【解决方案2】:

    据我了解,您应该具有以下结构: 此外,SecondViewController 应该有情节提要 ID

    你的 ViewController.swift:

    class ViewController: UIViewController, UINavigationControllerDelegate {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        @IBAction func didTapBtn1(sender: AnyObject) {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let secondViewController = storyboard.instantiateViewControllerWithIdentifier("SecondViewController")
            self.navigationController?.pushViewController(secondViewController, animated: true)
        }
    }
    

    SecondViewController.swift :

    class SecondViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        @IBAction func didTapBtn2(sender: AnyObject) {
            let picker = UIImagePickerController()
            picker.allowsEditing = true
            picker.delegate = self
            presentViewController(picker, animated: true, completion: nil)
        }
    
        func imagePickerControllerDidCancel(picker: UIImagePickerController) {
            picker.dismissViewControllerAnimated(true, completion: nil)
        }
    }
    

    此代码已经过测试。我认为,问题在于调用 SecondViewController。

    更新:

    如果你使用的是xib,那么你通过以下方式调用SecondViewcontroller:

    @IBAction func didTapBtn1(sender: AnyObject) {
        let secondViewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
        self.navigationController?.pushViewController(secondViewController, animated: true)
    }
    

    在您的 ParentViewController 中

    【讨论】:

    • 感谢您精心设计的解释。但是,我没有使用 Storyboard。我正在使用单独的 .Xib 文件。在这种情况下,我该如何解决这个实例化问题?
    • 不,不幸的是,这不会改变 UIImagePicker 上取消按钮的响应方式。
    • 也许更多信息,实际上有一个 UITabBarController 有 4 个项目,当按下时每个项目成为 UINavigationControllers:let item1 = UINavigationController(rootViewController: NewsFeedViewController(nibName: "NewsFeedView", bundle: nil) )
    猜你喜欢
    • 2014-07-21
    • 2011-12-22
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多