navigationBar .tintColor с UIDocumentPickerViewController (средство выбора документов)?

Я использую Swift 2 в Xcode 7.0 beta 6.

Короче говоря, я пытаюсь выяснить, как установить .navigationBar.barStyle и navigationBar.tintColor при использовании средства выбора документов для доступа к iCloud, то есть UIDocumentPickerViewController.

Я пробовал, например. :

/...
documentPicker.navigationController!.navigationBar.barStyle = UIBarStyle.Default
documentPicker.navigationController!.navigationBar.tintColor = UIColor.orangeColor()
/...

Например. Здесь у меня есть контроллер представления, встроенный в контроллер навигации:

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

В MyNavigationController я могу установить .barStyle и .tintStyle следующим образом:

class MyNavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBar.barStyle = UIBarStyle.Default
        self.navigationBar.tintColor = UIColor.orangeColor()
    }
}

Итак, .tintStyle оранжевого цвета следующим образом:

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

iCloud включен, и FirstViewController соответствует UIDocumentPickerDelegate. Кнопка панели вызывает функцию IBAction, как показано здесь в коде для FirstViewController:

class FirstViewController: UIViewController, UIDocumentPickerDelegate {
    // ...
    @IBAction func importDocument(sender: UIBarButtonItem) {
        let documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: ["public.text"], inMode: UIDocumentPickerMode.Import)
        documentPicker.delegate = self
        documentPicker.modalPresentationStyle = UIModalPresentationStyle.FullScreen
        documentPicker.popoverPresentationController?.barButtonItem = sender
        self.presentViewController(documentPicker, animated: true, completion: nil)
}

    func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) {
        // ...
    }

    func documentPickerWasCancelled(controller: UIDocumentPickerViewController) {
        // ...
    }
}

Это работает. Средство выбора документов загружается, как и ожидалось:

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

НО. Чтобы понять, как это сделать, я хочу, чтобы пункт меню «Готово» был оранжевым. Как и предыдущий.

Я попытался добавить следующий код в @IBAction следующим образом:

//...
documentPicker.navigationController!.navigationBar.barStyle = UIBarStyle.Default
documentPicker.navigationController!.navigationBar.tintColor = UIColor.orangeColor()
self.presentViewController(documentPicker, animated: true, completion: nil)
//...

Это не работает, потому что на данный момент documentPicker.navigationController равно nil.

Может ли кто-нибудь сказать мне, как или где в цикле я могу получить доступ к documentPicker.navigationController!.navigationBar.tintColor?

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

Или, возможно, мне следует создать собственный контроллер навигации и собственный контроллер представления средства выбора документов. Тогда теоретически я смогу получить доступ к соответствующему viewDidLoad. Я попробовал это, но понял, что тогда мне также понадобится пользовательская версия протокола UIDocumentPickerDelegate. Наверняка должно быть более простое решение (и я сомневался, будет ли оно разрешено).


person simons    schedule 26.08.2015    source источник


Ответы (2)


Вы можете изменить цвет оттенка навигационной панели по умолчанию с помощью UIAppearance:

UINavigationBar.appearance().tintColor = UIColor.orangeColor()
person rshev    schedule 26.08.2015
comment
Замечательно. Спасибо. - person simons; 26.08.2015
comment
Это изменит цвет оттенка всего приложения, можем ли мы изменить только цвет оттенка documentViewController - person Yogesh Patel; 01.02.2019
comment
Согласен с комментарием @YogeshPatel. - person Sagar Zala; 24.01.2020
comment
[Внешний вид UINavigationBar].tintColor = [UIColor yourColor]; // для цвета заголовка кнопки и [вида UINavigationBar].backgroundColor = [UIColor yourColor]; // для цвета фона. Работал для меня как шарм. У меня эта проблема только на iOS 14 версии. - person Ravi; 03.03.2021

swift 3,4 и xcode 9+:

documentPicker.view.tintColor = .orange
person Ahmad Labeeb    schedule 14.03.2018
comment
его изменение цвета оттенка элементов представления, а не цвета оттенка кнопки панели. - person Surjeet Rajput; 16.03.2018
comment
Я знаю, но в средстве выбора документов нет панели навигации, элементы являются подвидами представления, поэтому проблема решается. - person Ahmad Labeeb; 16.03.2018
comment
Неа не работает. Цвет оттенка представления будет применяться к его подпредставлению. Ответ выше работает нормально. - person Surjeet Rajput; 19.03.2018
comment
мой код работает для меня не выше ответа, может быть он отличается в версии IOS, если вы нашли ответ, почему скажите мне - person Ahmad Labeeb; 19.03.2018
comment
я дам вам знать, если я что-то узнал. - person Surjeet Rajput; 19.03.2018
comment
Использование этого подхода изменит оттенок панели вкладок, панели поиска и панели навигации в средстве выбора документа. - person Paul Solt; 23.10.2019
comment
Для меня это решение сработало, но проблема, с которой я столкнулся, заключается в том, что сначала цвет кнопки «Отмена» в средстве выбора документов не изменился, но после первой попытки в каждой попытке он меняется правильно. - person Manish Pathak; 29.11.2019
comment
UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil работает для меня - person famfamfam; 19.01.2021