navigationBar .tintColor 与 UIDocumentPickerViewController(文档选择器)?

navigationBar .tintColor with UIDocumentPickerViewController (Document Picker)?

我在 Xcode 7.0 beta 6

中使用 Swift 2

长话短说,我正在尝试弄清楚如何在使用文档选择器访问 iCloud 时设置 .navigationBar.barStylenavigationBar.tintColor - 即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) {
        // ...
    }
}

行得通。文档选择器按预期加载:

但是。为了弄清楚如何做到这一点,我希望菜单项 "Done" 为橙色。和之前一样。

我尝试将以下代码添加到 @IBAction 中,如下所示:

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

这不起作用,因为此时 documentPicker.navigationControllernil

任何人都可以告诉我如何或在循环中的何处可以访问 documentPicker.navigationController!.navigationBar.tintColor

或者我遗漏了一些东西,还有其他更改菜单颜色的方法?

或者我应该寻找创建自定义导航控制器和自定义文档选择器视图控制器的方法。然后理论上我将能够访问相关的 viewDidLoad。我试过了,但意识到我还需要 UIDocumentPickerDelegate 协议的自定义版本。肯定有一个更简单的解决方案(我怀疑是否允许这样做)。

您可以通过 UIAppearance:

更改导航栏默认色调颜色
UINavigationBar.appearance().tintColor = UIColor.orangeColor()

swift 3,4 和 xcode 9+ :

documentPicker.view.tintColor = .orange