UIBarButtonItems 不可见
UIBarButtonItems are not visible
我有一个 UIViewController
允许用户通过 UIImagePickerController
select 照片或视频。一旦他们 select 其中一个图像被分配给一个名为 var selectedImage
的 属性 (如果他们 select 一个视频,有一种方法可以为该视频生成缩略图) .它按预期工作。
问题是我要处理2个UIBarButtonItem
的状态。我想在 selectedImage
为 nil
时禁用它们,并在有图像时设置 isEnabled
。
很简单,对吧?好吧,问题是最初它加载了 UIViewController
,按钮被禁用并且可见,然后我 select 来自图库的照片, didFinishPickingMediaWithInfo
被调用并且在那里,我也调用handlePost()
应该处理按钮状态 (enabled/disabled) 的方法。好吧,出于某种原因,即使 selectedImage
中有图像,按钮也没有显示(实际上是不可见的,但据我所知,UIBarButtonItem
中没有 isHidden
。
他们仍然活跃,如果我点击他们(尽管没有看到他们)他们会做他们的工作。现在,问题是为什么它们不可见?我可以保证 Colors.tint
有一个值(我在整个应用程序中使用这个 class,它有效)并且 selectedImage
有一个值(我已经设置了一个断点并调用 handlePost()
方法,通过第一个 if
语句,其中 属性 有一个值。但是,我没有看到显示的按钮。问题是为什么?
@IBOutlet weak var clearButton: UIBarButtonItem!
@IBOutlet weak var filterButton: UIBarButtonItem!
var selectedImage: UIImage?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
handlePost()
}
func handlePost() {
if selectedImage != nil {
clearButton.isEnabled = true
clearButton.tintColor = Colors.tint
filterButton.isEnabled = true
filterButton.tintColor = Colors.tint
shareButton.isEnabled = true
shareButton.backgroundColor = Colors.tint
shareButton.setTitleColor(.white, for: .normal)
}
else {
clearButton.isEnabled = false
clearButton.tintColor = .darkGray
filterButton.isEnabled = false
filterButton.tintColor = .darkGray
shareButton.isEnabled = false
shareButton.backgroundColor = .darkGray
shareButton.setTitleColor(.lightGray, for: .normal)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let videoUrl = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
if let thumbnail = self.generateThumbnailForImage(videoUrl) {
self.videoUrl = videoUrl
self.photoImageView.image = thumbnail
self.selectedImage = thumbnail
handlePost()
}
}
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
selectedImage = image
photoImageView.image = image
handlePost()
}
dismiss(animated: true, completion: nil)
}
正如我在评论中提到的,我不确定是什么问题,因为这不会发生。但简单的解决方案是删除 UIBarButtonItem
s 并用 UIButton
s 代替它们。这成功了,现在他们正在按照他们应该的方式行事。
我有一个 UIViewController
允许用户通过 UIImagePickerController
select 照片或视频。一旦他们 select 其中一个图像被分配给一个名为 var selectedImage
的 属性 (如果他们 select 一个视频,有一种方法可以为该视频生成缩略图) .它按预期工作。
问题是我要处理2个UIBarButtonItem
的状态。我想在 selectedImage
为 nil
时禁用它们,并在有图像时设置 isEnabled
。
很简单,对吧?好吧,问题是最初它加载了 UIViewController
,按钮被禁用并且可见,然后我 select 来自图库的照片, didFinishPickingMediaWithInfo
被调用并且在那里,我也调用handlePost()
应该处理按钮状态 (enabled/disabled) 的方法。好吧,出于某种原因,即使 selectedImage
中有图像,按钮也没有显示(实际上是不可见的,但据我所知,UIBarButtonItem
中没有 isHidden
。
他们仍然活跃,如果我点击他们(尽管没有看到他们)他们会做他们的工作。现在,问题是为什么它们不可见?我可以保证 Colors.tint
有一个值(我在整个应用程序中使用这个 class,它有效)并且 selectedImage
有一个值(我已经设置了一个断点并调用 handlePost()
方法,通过第一个 if
语句,其中 属性 有一个值。但是,我没有看到显示的按钮。问题是为什么?
@IBOutlet weak var clearButton: UIBarButtonItem!
@IBOutlet weak var filterButton: UIBarButtonItem!
var selectedImage: UIImage?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
handlePost()
}
func handlePost() {
if selectedImage != nil {
clearButton.isEnabled = true
clearButton.tintColor = Colors.tint
filterButton.isEnabled = true
filterButton.tintColor = Colors.tint
shareButton.isEnabled = true
shareButton.backgroundColor = Colors.tint
shareButton.setTitleColor(.white, for: .normal)
}
else {
clearButton.isEnabled = false
clearButton.tintColor = .darkGray
filterButton.isEnabled = false
filterButton.tintColor = .darkGray
shareButton.isEnabled = false
shareButton.backgroundColor = .darkGray
shareButton.setTitleColor(.lightGray, for: .normal)
}
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let videoUrl = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
if let thumbnail = self.generateThumbnailForImage(videoUrl) {
self.videoUrl = videoUrl
self.photoImageView.image = thumbnail
self.selectedImage = thumbnail
handlePost()
}
}
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
selectedImage = image
photoImageView.image = image
handlePost()
}
dismiss(animated: true, completion: nil)
}
正如我在评论中提到的,我不确定是什么问题,因为这不会发生。但简单的解决方案是删除 UIBarButtonItem
s 并用 UIButton
s 代替它们。这成功了,现在他们正在按照他们应该的方式行事。