проблема с моим кодом контроллера навигации в swift - PullRequest
0 голосов
/ 19 сентября 2018

Сейчас в моем приложении 5 контроллеров представления для моих 5 элементов панели вкладок.Каждый контроллер представления имеет одинаковый стиль и просто имеет свой заголовок.

Вот функция, которую я использую во всех этих контроллерах представления по отдельности и вызываю функцию в viewDidLoad ()

 private func setupNavBar() {
    let navBar = navigationController?.navigationBar
    navBar?.prefersLargeTitles = true
    navigationItem.title = "Library"
    navigationItem.rightBarButtonItem?.tintColor = .white
    navBar?.backgroundColor = UIColor.rgb(red: 10, green: 10, blue: 10)
    navBar?.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    navBar?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

    navBar?.setBackgroundImage(UIImage(), for: .default)
    navBar?.shadowImage = UIImage()
}

Я не хочу делать это в каждом VC.Вместо этого я хочу вызвать функцию, подобную следующей:

setupNavBar(with largeTitles: Bool, has title: String)

Я попытался создать новый файл Functions.swift и добавил код в качестве функции, но я получаю сообщения об ошибках как navigationContoller, navigationBar, navigationItem какundefined

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

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

UINavigationBar.appearance().barTintColor = UIColor(red: 240/255, green: 224/255, blue: 227/255, alpha: 1)
    UINavigationBar.appearance().tintColor = UIColor.white
    UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]
   UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Cardo-Regular", size: 22)!]
   UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "Cardo-Regular", size: 20)!], for: UIControlState.normal)
0 голосов
/ 19 сентября 2018

Вы можете создать расширение на UIViewController следующим образом:

extension UIViewController {
    public func setupNavBar(with largeTitles: Bool, has title: String) {
        let navBar = navigationController?.navigationBar
        navBar?.prefersLargeTitles = largeTitles
        navigationItem.title = title
        navigationItem.rightBarButtonItem?.tintColor = .white
        navBar?.backgroundColor = UIColor(red: 10/255, green: 10/255, blue: 10/255, alpha: 1)
        navBar?.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navBar?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

        navBar?.setBackgroundImage(UIImage(), for: .default)
        navBar?.shadowImage = UIImage()
    }
}

Затем вы можете просто вызвать его так из любого контроллера вида:

self.setupNavBar(with: false, has: "Check")

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

0 голосов
/ 19 сентября 2018
class Functions: NSObject {

    public static func setupNavBar(largeTitles: Bool, title: String, viewController: UIViewController?) {
        guard let viewController = viewController else { return }
        viewController.navigationController?.navigationBar.prefersLargeTitles = largeTitles
        viewController.navigationController?.navigationItem.title = title.capitalized
        /* ... */
    }
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        Functions.setupNavBar(largeTitles: false, title: "Library", viewController: self)
    }
}
...