Ios Swift:将值从一个类转移到另一个类,或将特定值从ViewController类转移到NSObject
如何将值从UIViewController中的viewDidLoad传输到另一个类-NSObjectIos Swift:将值从一个类转移到另一个类,或将特定值从ViewController类转移到NSObject,ios,swift,uiviewcontroller,nsobject,Ios,Swift,Uiviewcontroller,Nsobject,如何将值从UIViewController中的viewDidLoad传输到另一个类-NSObject 基本上我有一个MainViewController类,类内有一个导航栏。我想访问导航栏的高度,并将值传输到另一个文件/类,即->class SettingsLauncher:NSObject 访问导航栏高度的唯一方法是在MainViewController类的viewDidLoad内。这可能就是问题所在 SettingsLauncher需要获取导航栏的高度值,以便在导航栏的正下方显示一个小视图
基本上我有一个MainViewController类,类内有一个导航栏。我想访问导航栏的高度,并将值传输到另一个文件/类,即->class SettingsLauncher:NSObject 访问导航栏高度的唯一方法是在MainViewController类的viewDidLoad内。这可能就是问题所在 SettingsLauncher需要获取导航栏的高度值,以便在导航栏的正下方显示一个小视图 代码如下: navBarHeight获取导航栏的高度。如何将该值转移到其他类(SettingsLauncher)
在
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
}
}
在
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
}
谢谢你的回复。但是,当我打印navHeight时,它返回零。我遗漏了什么吗?你在哪里印刷?在MainViewController或SettingsLauncher中?我正在两者上打印它。它在主ViewController中工作正常,但在SettingsLauncher中打印出“nil”您可以共享SettingsLauncher类的代码片段吗?类SettingsLauncher:NSObject、UICollectionViewDataSource、UICollectionViewDelegate、UICollectionViewDelegateFlowLayout{var navHeight=MainViewController.structure.topBarHeight let collectionView:UICollectionView={let layout=UICollectionViewFlowLayout()let cv=UICollectionView(frame:.zero,collectionViewLayout:layout)返回cv}()类设置工具{var navHeight:CGFloat?}func showSettings(){let mainViewController=mainViewController()打印(导航高度,“
class SettingsLauncher {
var navHeight = MainViewController.structure.topBarHeight
}