Swift: перенести значение из одного класса в другой или конкретнее из класса ViewController в NSObject - PullRequest
0 голосов
/ 23 декабря 2018

Как передать значение из viewDidLoad в UIViewController в другой класс - NSObject.

В основном у меня есть класс MainViewController, и внутри класса находится панель навигации.Я хотел получить доступ к высоте панели навигации и перенести значение в другой файл / класс, который является -> class SettingsLauncher: NSObject.

Единственный способ получить доступ к панели навигации Высота - внутри viewDidLoad MainViewControllerучебный класс.Это может быть проблемой!

Параметру SettingsLauncher необходимо получить значение высоты панели навигации, чтобы он мог отображать небольшой вид прямо под панелью навигации.

Из кода ниже:

navBarHeight возвращает высоту панели навигации.Как я могу перенести это значение в другой класс (SettingsLauncher)?

let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
let navBarHeight= self.navigationController?.navigationBar.frame.height ?? 0.0
let topBarHeight = statusBarHeight + navBarHeight

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Создайте структуру в классе MainViewController, например:

class MainViewController: UIViewController {

    struct structure {
        static var topBarHeight = CGFloat()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
        let navBarHeight= self.navigationController?.navigationBar.frame.height ?? 0.0
        structure.topBarHeight = statusBarHeight + navBarHeight
    }
}

Затем используйте ее для доступа к значению из объекта SettingsLauncher:

class SettingsLauncher {
    var navHeight = MainViewController.structure.topBarHeight
}
0 голосов
/ 23 декабря 2018

Создайте свойство в SettingsLauncher как navHeight, затем

class SettingsLauncher {
    var navHeight: CGFloat?
}

В MainViewController,

class MainViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let statusBarHeight = UIApplication.shared.statusBarFrame.size.height
        let navBarHeight= self.navigationController?.navigationBar.frame.height ?? 0.0
        let topBarHeight = statusBarHeight + navBarHeight

        let settings = SettingsLauncher()
        settings.navHeight = topBarHeight //navBarHeight
    }
}
...