Я использую 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
. Наверняка должно быть более простое решение (и я сомневался, будет ли оно разрешено).