Кнопки UIDocumentPickerViewController выглядят отключенными, но почему они работают?

Я использую UIDocumentPickerViewController для экспорта изображений в приложение «Файлы» в iOS 11. Появляется средство выбора, и я могу выбрать место назначения для файлов. Я получаю обратный вызов о том, что файлы были перемещены, и я вижу их в файлах, так что, похоже, все работает нормально. Однако пользовательский интерфейс неправильный — кнопки «Добавить» и «Отмена» выглядят отключенными, но на самом деле они работают нормально. Кнопки не выглядят так, если я просто использую «Сохранить в файлы» на общем листе.

Это мой код:

UIDocumentPickerViewController *docPicker = 
[[UIDocumentPickerViewController alloc] initWithURLs:self.assetURLs inMode:UIDocumentPickerModeExportToService];

docPicker.delegate = self;
[vc presentViewController:docPicker animated:YES completion:nil];

Что я пробовал:
1) Я пробовал оба типа Move и Export
2) Я включил возможности iCloud (все три элемента: ключ-значение, Document и CloudKit) — никакой разницы в опыте [ на самом деле код работал и без этих наборов, хотя в документации сказано обратное])

Вот скриншот того, как выглядит пользовательский интерфейс. Как видите, пользовательский интерфейс говорит, что добавит элемент в выбранный каталог (и это действительно так, если я нажму «Добавить»):

введите здесь описание изображения

Кто-нибудь знает, как заставить кнопки отображаться синим цветом и выглядеть включенными? Я не нашел ни одного примера кода в Интернете, который я мог бы попробовать - если у кого-то есть указатель, я могу попробовать, чтобы увидеть, связано ли это с моей конфигурацией или кодом.


person Nik Bhatt    schedule 10.02.2018    source источник
comment
Делает ли ваше приложение какие-либо действия для изменения внешнего вида в других частях вашего приложения?   -  person rmaddy    schedule 10.02.2018
comment
Это отличный вопрос. Мое приложение темное, поэтому у меня есть несколько изменений внешнего вида. Я отключил их, и синий вернулся. Оказывается, UINavigationBar.appearance.tintColor каким-то образом влияет на эти кнопки, хотя я не думаю, что они должны. Не уверен, как я собираюсь обойти это, но, по крайней мере, у меня есть объяснение. Большое спасибо!   -  person Nik Bhatt    schedule 10.02.2018
comment
[Внешний вид UINavigationBar].tintColor = [UIColor yourColor]; // для цвета заголовка кнопки и [вида UINavigationBar].backgroundColor = [UIColor yourColor]; // для цвета фона. Работал для меня как шарм. У меня эта проблема только на iOS 14 версии.   -  person Ravi    schedule 03.03.2021


Ответы (2)


Судя по вашему комментарию, ваше приложение устанавливает tintColor с помощью UINavigationBar.appearance. Это повлияет на все панели навигации, в том числе на панели системного навигационного контроллера, такие как UIDocumentPickerViewController.

Я имел дело с этим в одном из моих собственных приложений. Одним из решений является создание подкласса UIDocumentPickerViewController и использование вашего подкласса везде, где вам нужен вид выбора. В своем подклассе переопределите viewDidLoad и установите UINavigationBar.appearance.tintColor обратно на nil. А также переопределите viewWillDisappear, чтобы сбросить UINavigationBar.appearance.tintColor до нужного цвета.

person rmaddy    schedule 10.02.2018
comment
Отличная идея. Спасибо за предложение. - person Nik Bhatt; 10.02.2018

Я не большой поклонник временного изменения глобального внешнего вида, как это предлагается в утвержденном ответе. Вы можете просто сбросить внешний вид для UIDocumentPickerViewController, и кнопки панели вернутся к исходному синему цвету.

if #available(iOS 11.0, *) {
    UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}
person Antoine Lamy    schedule 19.04.2018