【问题标题】:viewDidLoad() method not called after simultaneous pop and push to same view在同时弹出并推送到同一视图后未调用 viewDidLoad() 方法
【发布时间】:2015-09-21 09:08:48
【问题描述】:

我在开始时将这段代码用于导航视图控制器

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

【问题讨论】:

  • 向我显示代码,您再次推送具有不同属性的同一个 Viewcontroller
  • 你是推送同一个实例还是创建一个新的 slvc 实例?
  • 您好,感谢您的回复.....我已经用精确值更新了我的问题......请检查

标签: ios objective-c


【解决方案1】:

这是因为你持有一个指向 SLvc 控制器的强指针。当您弹出它时,视图控制器将被保留。每次推送时初始化一个新控制器将解决您的问题。

【讨论】:

    【解决方案2】:

    //从视图中弹出时调用下面的方法

    - (void)viewWillAppear:(BOOL)animated
    {
    
        [super viewWillAppear:animated];
    }
    

    【讨论】:

      【解决方案3】:

      您可以在视图控制器中尝试这些:

      -(void) viewWillAppear:(BOOL)animated{
          [super viewWillAppear:animated];
          // your code here
      }
      

      或

      -(void)awakeFromNib
      {
         [super awakeFromNib];
         // your code here
      }
      

      viewDidLoad() - 当视图加载到内存时在init(coder:) 之后调用。

      类似于viewWillAppear,在视图从屏幕上消失之前调用此方法。和viewWillAppear 一样,这个方法可以在视图控制器对象的生命周期内被多次调用。当用户离开屏幕时调用它——可能是关闭屏幕、选择另一个选项卡、点击显示模态视图的按钮或向下导航层次结构

      【讨论】:

        【解决方案4】:

        viewDidLoad 只被调用一次,当 ViewController 第一次加载到内存中时。这是您要实例化任何实例变量并构建在此 ViewController 的整个生命周期中存在的任何视图的地方。但是,此时视图通常还不可见。

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

        【讨论】:

          猜你喜欢
          • 2011-10-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-07
          • 2022-01-23
          • 2012-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多