关闭 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 覆盖。为清晰起见添加了红色背景色。
您需要删除此行:
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"
我有一个条形按钮项目,它会触发一个警报,询问用户是要拍照还是要从他们的图库中选择图像。选择照片库后,我实例化了一个 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 覆盖。为清晰起见添加了红色背景色。
您需要删除此行:
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"