我的应用只有一个ViewController
,因此只有一个ViewController.swift
我希望每当用户恢复应用时(多任务处理)都会重新加载ViewController
。 viewDidLoad()
函数中有初始化代码,在应用程序恢复时不会触发。我希望每当应用程序恢复时都会触发此代码,因此我希望在应用程序恢复时重新加载ViewController
。
在Swift中有一种优雅的方法吗?
谢谢。
答案 0 :(得分:3)
您可以向视图控制器添加和观察,以便在应用程序进入前台时通知您。每当您的应用程序进入前台时,观察者将调用此方法reloadView
。请注意,当视图第一次加载时,您必须自己self.reloadView()
调用此方法。
以下是Swift代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.reloadView()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadView", name: UIApplicationWillEnterForegroundNotification, object: nil)
}
func reloadView() {
//do your initalisations here
}
答案 1 :(得分:0)
你可以用两种不同的方式做到这一点。
1。)viewController viewWillAppear
中有一个函数尝试使用此函数中的重载功能。每次出现视图时都会调用它。
2.)appDelegate applicationWillEnterForeground
中有一个函数尝试使用此函数中的重载功能。每次应用程序从后台模式返回时都会调用它。
我希望这会有所帮助。谢谢
答案 2 :(得分:0)
进入你的app delegate.m文件
- (void)applicationWillEnterForeground:(UIApplication *)application {
// This method gets called every time your app becomes active or in foreground state.
[[NSNotificationCenter defaultCenter]postNotificationName:@"appisactive" object:nil];
}
转到您的视图controller.m文件,并假设您希望每次用户从后台返回到前台时更改标签文本。 默认情况下,文本的标签是这样的。
@implementation ViewController{
UIlabel *lbl;
}
-(void)viewDidLoad{
lbl = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 75, 30)];
lbl.text = @"text1";
[self.view addSubview:lbl];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textChange) name:@"appisactive" object:nil];
//this view controller is becoming a listener to the notification "appisactive" and will perform the method "textChange" whenever that notification is sent.
}
最后
-(void)textChange{
lbl.text = @"txt change";
}
实施这些项目之后。 Command + H去使应用程序进入后台而不在Xcode中停止它。 然后按Command + H + H(连续2次)并打开应用程序,您将注意到标签文本的更改。
这只是一个演示,让您掌握来自应用程序代表的通知的想法。