UIBarButtonItems не видны - PullRequest
       8

UIBarButtonItems не видны

0 голосов
/ 26 октября 2018

У меня есть 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)
}

1 Ответ

0 голосов
/ 26 октября 2018

Как я уже упоминал в комментариях, я не уверен, в чем проблема, потому что для этого нет проблем.Но простым решением было удалить UIBarButtonItem s и просто заменить их UIButton s.Это сработало, и теперь они ведут себя так, как должны.

...