解除UIImagePickerController后,Bar Button Item无法正常工作

时间:2016-03-30 07:30:31

标签: ios xcode swift uiimagepickercontroller uibarbuttonitem

我有一个条形按钮项,触发一个警告,询问用户是否要拍照或从图书馆中挑选图像。在选择照片库时,我实例化一个UIImagePickerController,以便他们选择一张照片。

我的问题是,在选择图像并解除视图控制器后,应用程序返回原始视图控制器,图像正确显示在插座中,但之前工作的按钮不会触发警报再次选择图像(也不会打印到控制台)。

@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插座时,该按钮在解除视图控制器后工作。如果在选择图像之前在任何时候取消,该按钮也可以使用。当我将图像分配到插座时,它才起作用。

提前感谢您的帮助!

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

Simulation Image

2 个答案:

答案 0 :(得分:1)

选择图像后,您的工具栏高度为0。 您可以在“调试视图层次结构”中看到这一点。

要解决此问题,只需删除约束“Toolbar.top = Image Picker View.bottom + 192”

答案 1 :(得分:0)

您需要删除此行:

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
  }
})