同时弹出并推送到同一视图

时间:2015-09-21 09:08:49

标签: ios objective-c

我在开始时使用此代码作为导航视图控制器

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没有运行。

4 个答案:

答案 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)

当ViewController首次加载到内存中时,

viewDidLoad只调用一次。这是您希望实例化任何实例变量并构建在此ViewController的整个生命周期中存在的任何视图的位置。但是,此时通常尚未看到该视图。

但是,每次出现视图时都会调用viewWillAppear