首页 文章

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

提问于
浏览
0

我有一个条形按钮项目,触发一个警告,询问用户是否要拍照或从图书馆中选择图像 . 在选择照片库时,我实例化一个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

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

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

  • 1

    您需要删除此行:

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

相关问题