У меня есть UIViewController
, который позволяет пользователю выбрать фотографию или видео с помощью UIImagePickerController
. Как только они выбирают одно из них, изображение присваивается свойству var selectedImage
(если они выбирают видео, есть метод, который генерирует миниатюру для этого видео). Работает как положено.
Проблема в том, что я хочу обработать состояние 2 UIBarButtonItem
с. Я хочу отключить их, когда selectedImage
равен nil
, и установить isEnabled
, как только появится изображение.
Довольно прямо, верно? Проблема в том, что изначально он загружает UIViewController
, кнопки отключены и видны, затем я выбираю фотографию из галереи, вызывается didFinishPickingMediaWithInfo
и там я также вызываю метод handlePost()
, который должен позаботиться состояния (включено / отключено) кнопок. Ну, по какой-то причине, хотя в selectedImage
есть изображение, кнопки не отображаются (практически невидимы, но, насколько я знаю, для UIBarButtonItem
.
нет
isHidden
.
Они все еще активны, если я нажму на них (несмотря на то, что не вижу их), они сделают свою работу. Теперь проблема в том, почему они не видны? Я могу гарантировать, что Colors.tint
имеет значение (я использую этот класс в приложении, он работает), а 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)
}