[英]viewDidLoad() method not called after simultaneous pop and push to same view
我在一开始就将此代码用于导航视图控制器
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
splashViewController *rootVC = [[splashViewController alloc]initWithNibName:@"splashViewController" bundle:nil];
self.navigator = [[UINavigationController alloc] initWithRootViewController:rootVC];
self.window.rootViewController = self.navigator;
[self.window makeKeyAndVisible];
之后,我正在使用这种简单的方法来推送到下一个视图
ScoreboardListViewController *SLvc = [[ScoreboardListViewController alloc]initWithNibName:@"ScoreboardListViewController" bundle:nil];
[self.navigationController pushViewController:SLvc animated:YES];
并使用它从视图中弹出
[self.navigationController popViewControllerAnimated:YES];
但是当我弹出并再次推送到具有不同属性值的同一视图时,viewdidload方法未运行
它仅在我只是进入其他任何视图然后再推送到该视图时运行
我无法理解这种异常行为。 就像我每次推送到任何视图时一样,都应执行此viewdidload .....
例如,我这样做是为了进入视图->
SLvc.trigger = @"sold";
SLvc.lblHeader.text = value;
[self.navigationController pushViewController:SLvc animated:YES];
->然后我通过使用此后退按钮弹出
[self.navigationController popViewControllerAnimated:YES];
->然后我推到具有不同属性的相同视图
SLvc.trigger = @"earning";
SLvc.lblHeader.text = value;
[self.navigationController pushViewController:SLvc animated:YES]
这次viewdidload没有运行。
这是因为您持有指向SLvc控制器的强大指针。 弹出时,将保留视图控制器。 每次按下时初始化一个新的控制器将解决您的问题。
//下面的方法从视图中弹出时调用
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
您可以在视图控制器中尝试以下方法:
-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// your code here
}
要么
-(void)awakeFromNib
{
[super awakeFromNib];
// your code here
}
viewDidLoad()
-在将视图加载到内存中时在init(coder:)
之后调用。
与viewWillAppear
相似,此方法在视图从屏幕消失之前被调用。 与viewWillAppear
一样,可以在视图控制器对象的生存期内多次调用此方法。 当用户离开屏幕导航时调用它-可能是关闭屏幕,选择另一个选项卡,点击显示模式视图的按钮或在导航层次结构中进一步导航
当ViewController第一次加载到内存中时, viewDidLoad
被调用一次。 在这里您要实例化任何实例变量并构建在此ViewController整个生命周期中都有效的视图。 但是,此刻该视图通常不可见。
但是,每次出现视图时都会调用viewWillAppear
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.