我在开始时使用此代码作为导航视图控制器
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没有运行。
答案 0 :(得分:2)
这是因为你持有一个强大的指向SLvc控制器的指针。弹出它时,将保留视图控制器。每次推送时初始化一个新控制器将解决您的问题。
答案 1 :(得分:2)
//从视图中弹出时调用的方法
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
答案 2 :(得分:1)
您可以在viewcontroller中尝试这些:
-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
// your code here
}
或
-(void)awakeFromNib
{
[super awakeFromNib];
// your code here
}
viewDidLoad()
- 在视图加载到内存后init(coder:)
之后。
与viewWillAppear
类似,此方法在视图从屏幕上消失之前调用。和viewWillAppear
一样,在视图控制器对象的生命周期中可以多次调用此方法。当用户离开屏幕时调用它 - 可能是关闭屏幕,选择另一个选项卡,点击显示模态视图的按钮,或者在导航层次结构中向下导航
答案 3 :(得分:0)
viewDidLoad
只调用一次。这是您希望实例化任何实例变量并构建在此ViewController的整个生命周期中存在的任何视图的位置。但是,此时通常尚未看到该视图。
但是,每次出现视图时都会调用viewWillAppear
。