简体   繁体   English

Swift:将值从一个类传输到另一个类或从 ViewController 类到 NSObject 的特定值

[英]Swift: Transfer value from one class to another or to be specific from ViewController class to NSObject

How do I transfer a value from the viewDidLoad in a UIViewController to another class - NSObject.如何将值从 UIViewController 中的 viewDidLoad 传输到另一个类 - NSObject。

Basically I have a MainViewController class and inside the class is a navigation bar.基本上我有一个 MainViewController 类,类里面是一个导航栏。 I wanted to access the height of the navigation bar and transfer the value to to another file/class which is -> class SettingsLauncher: NSObject.我想访问导航栏的高度并将值传输到另一个文件/类,即 -> class SettingsLauncher: NSObject。

Only way I can access the navigation Bar Height is inside viewDidLoad of the MainViewController class.我可以访问导航栏高度的唯一方法是在 MainViewController 类的 viewDidLoad 内。 This is might be the issue!这可能是问题所在!

The SettingsLauncher needs to get the height value of the navigation Bar so it can display a small view right under the navigation bar. SettingsLauncher 需要获取导航栏的高度值,以便它可以在导航栏正下方显示一个小视图。

From Code below:从下面的代码:

The navBarHeight gets the height of the navigation bar. navBarHeight 获取导航栏的高度。 How can I transfer that value to my other class (SettingsLauncher)?如何将该值转移到我的其他类(SettingsLauncher)?

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

Create a struct in the MainViewController class, like so: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
    }
}

Then use it to access the value from the SettingsLauncher object:然后使用它从SettingsLauncher对象访问值:

class SettingsLauncher {
    var navHeight = MainViewController.structure.topBarHeight
}

Create a property in SettingsLauncher like navHeight , thenSettingsLauncher创建一个属性,如navHeight ,然后

class SettingsLauncher {
    var navHeight: CGFloat?
}

In MainViewController ,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
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM