我使用Xcode 6.0.1和Swift创建了一个标签并将其连接到ViewController.swift,结果如下:
@IBOutlet weak var myLabel: UILabel!
每当我的应用程序进入前台,我希望将myLabel.text重置为特定的字符串,比如"Hello World"。
以前在Objective-C中,我可以在AppDelegate中这样做:
- (void)applicationWillEnterForeground:(UIApplication *)application {
self.viewController.myLabel.text=@"Hello World";
}
但是我在Xcode 6中用Swift语言实现这个功能时遇到了困难。因为AppDelegate没有设置视图控制器的实例,所以我在AppDelegate中定义了它:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var vc: ViewController=ViewController()
然后尝试同样的方法:
func applicationWillEnterForeground(application: UIApplication) {
vc.myLabel.text="Hello World"
}
但是,当我运行应用程序时,视图正常显示,然后我按下Home键,再次进入应用程序时,我会收到错误消息“fatal error: unexpectedly found nil while unwrapping an Optional value”。
因此,我了解到UILabel是可选的,并且由于其值为nil,因此出现了此错误。但我不明白为什么它的值为nil,因为视图已经加载。我尝试使用applicationDidBecomeActive,但结果相同。我不能在ViewController类中使用viewDidLoad或viewWillAppear方法,因为当应用程序从后台转换到前台状态时不会调用这些方法。
同时更新了此内容
if vc.myLabel != nil {
vc.myLabel.text="Hello World"
}
确认一下,if语句是错误的。
有没有想法如何在Xcode 6和Swift中重置UI元素?谢谢。
application.keyWindow.rootViewController
获取实际视图控制器的引用,但事件方法可能更好,因为它将您的应用程序委托和视图控制器解耦。这还使得多个视图控制器能够简单地响应返回前台。 - Paulw11application.keyWindow.rootViewController.myLabel.text="Hello World"
这段代码无法正常工作,因为它找不到 rootViewController 上的 myLabel。我漏掉了什么? - AJProotViewController
强制转换为ViewController
的实例,因为普通的UIViewController
不知道myLabel
。例如:let vc=application.keyWindow.rootViewController as ViewController; vc.myLabel.text="hello world"
。 - Paulw11