关闭 UIImagePickerController 后条形按钮项目不起作用

Bar Button Item not working after dismissing UIImagePickerController

我有一个条形按钮项目,它会触发一个警报,询问用户是要拍照还是要从他们的图库中选择图像。选择照片库后,我实例化了一个 UIImagePickerController,因此它们 select 一张照片。

我的问题是,在选取图像并关闭视图控制器后,应用程序 returns 到原始视图控制器,图像正确显示在插座中,但之前工作的按钮不会触发再次提醒 select 图像(也不会向控制台打印任何内容)。

@IBAction func pickAnImage(sender: AnyObject) {
    selectImageSourceAlert()
}

func selectImageSourceAlert() {
    let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)
    let userLibrary = UIAlertAction(title: "Photo Library", style: .Default) {
        _ in
        self.presentImagePicker(pickerStyle: .PhotoLibrary)
    }
    let useCamera = UIAlertAction(title: "Camera", style: .Default) {
        _ in
        let x = UIImagePickerController.isSourceTypeAvailable(.Camera)
        print(x)
        if x {
            self.presentImagePicker(pickerStyle: .Camera)
        } else {
            print("No camera available")
        }
    }

    let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)

    alert.addAction(userLibrary)
    alert.addAction(useCamera)
    alert.addAction(cancelAction)

    presentViewController(alert, animated: true, completion: nil)
}

func presentImagePicker(pickerStyle style: UIImagePickerControllerSourceType) {
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = style
    imagePicker.allowsEditing = true

    self.presentViewController(imagePicker, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    self.dismissViewControllerAnimated(true, completion: nil)

    if let image = info["UIImagePickerControllerEditedImage"] as? UIImage {
        imagePickerView.image = image
    }
}

过了几天我还是想不通。我发现当我删除 "if let image = info" 位并放弃将图像分配给 imagePickerView 出口时,按钮在关闭视图控制器后起作用。如果我在 select 图像之前的任何时候取消,该按钮也可以使用。只有当我将图像分配给出口时它才不起作用。

在此先感谢您的帮助!

编辑:我注意到当我在右上角添加第二个按钮并将其分配给相同的操作时,即使在分配照片后它也能正常工作。左下角的第一个 Bar Button Item 仅在没有图像分配给 imageView 时才有效。不知道为什么,因为它没有以任何方式被 imageView 覆盖。为清晰起见添加了红色背景色。

Simulation Image

您需要删除此行:

self.dismissViewControllerAnimated(true, completion: nil)

您真的不需要它,因为图像选择器已关闭。 此函数将关闭当前视图控制器。

此外,在更新 UI 对象时尝试使用 dispatch_async。

dispatch_async(dispatch_get_main_queue(),
{
  if let image = info["UIImagePickerControllerEditedImage"] as? UIImage 
  {
     self.imagePickerView.image = image
  }
})

选择图片后,您的工具栏高度为 0。 你可以在 "Debug view hierarchy".

中看到这个

要解决这个问题,只需删除约束 "Toolbar.top = Image Picker View.bottom + 192"