Swift: 在AppDelegate中设置标签文本
Swift: Setting label text in the AppDelegate
我有一个包含两个标签的视图控制器。我想从 AppDelegate 设置这些标签的值。我崩溃了,当我调试它时,我发现标签为零。
这就是我在 AppDelegate 中调用视图控制器的方式:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
self.homeViewController = self.storyboard.instantiateViewControllerWithIdentifier("homeViewController") as! HomeViewController
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(checkForReachability), name: ReachabilityChangedNotification, object: nil)}
在 checkForReachability
中我设置了标签文本。例如:
self.homeViewController.labelNetworkType.text = "WIFI";
我已经确认标签已连接到视图控制器。
我该如何解决?我有这个问题是因为我的应用程序是单视图应用程序并且我记得 AppDelegate 中的主视图吗?
请帮忙
将标签 Outlet 的类型从 UILabel!
更改为 UILabel?
在您的控制器出现之前,不会创建插座。所以 UILabel!
会产生 optional unwrapping value failed
不要试图在它们出现之前更改视图控制器出口值,而是创建一个变量来存储它,并将其设置在出口的 didSet
或 viewDidLoad
在你的homeViewController
中:
var networkTypeText = "" {
didSet {
labelNetworkType.text = networkTypeText
}
}
在你的 homeViewController 中添加这样的东西。
var networkTypeText: String = "Default value" {
didSet {
if let networkType = labelNetworkType {
networkType.text = networkTypeText
}
}
}
在 viewDidLoad 中这样做:
override func viewDidLoad() {
super.viewDidLoad()
labelNetworkType!.text = networkTypeText
}
如果你这样做,当你第一次加载你的视图控制器时,它将有默认值。每次当您触发一组 networkTypeText 值时,如果标签不为零,它将自动更新标签。除此之外,如果您在启动出口之前在应用程序委托中设置了 networkTypeText 的值,它将在 viewDidLoad 中设置。
我有一个包含两个标签的视图控制器。我想从 AppDelegate 设置这些标签的值。我崩溃了,当我调试它时,我发现标签为零。 这就是我在 AppDelegate 中调用视图控制器的方式:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
self.homeViewController = self.storyboard.instantiateViewControllerWithIdentifier("homeViewController") as! HomeViewController
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(checkForReachability), name: ReachabilityChangedNotification, object: nil)}
在 checkForReachability
中我设置了标签文本。例如:
self.homeViewController.labelNetworkType.text = "WIFI";
我已经确认标签已连接到视图控制器。 我该如何解决?我有这个问题是因为我的应用程序是单视图应用程序并且我记得 AppDelegate 中的主视图吗?
请帮忙
将标签 Outlet 的类型从 UILabel!
更改为 UILabel?
在您的控制器出现之前,不会创建插座。所以 UILabel!
会产生 optional unwrapping value failed
不要试图在它们出现之前更改视图控制器出口值,而是创建一个变量来存储它,并将其设置在出口的 didSet
或 viewDidLoad
在你的homeViewController
中:
var networkTypeText = "" {
didSet {
labelNetworkType.text = networkTypeText
}
}
在你的 homeViewController 中添加这样的东西。
var networkTypeText: String = "Default value" {
didSet {
if let networkType = labelNetworkType {
networkType.text = networkTypeText
}
}
}
在 viewDidLoad 中这样做:
override func viewDidLoad() {
super.viewDidLoad()
labelNetworkType!.text = networkTypeText
}
如果你这样做,当你第一次加载你的视图控制器时,它将有默认值。每次当您触发一组 networkTypeText 值时,如果标签不为零,它将自动更新标签。除此之外,如果您在启动出口之前在应用程序委托中设置了 networkTypeText 的值,它将在 viewDidLoad 中设置。