代码之家  ›  专栏  ›  技术社区  ›  Parv Bhasker

在同时弹出和推送到同一视图后,未调用viewDidLoad()方法

  •  0
  • Parv Bhasker  · 技术社区  · 9 年前

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

    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 回复  |  直到 9 年前
        1
  •  2
  •   Sahil Kapoor    9 年前

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

        2
  •  2
  •   Bhavesh Nayi    9 年前

    //从视图中弹出时调用了以下方法

    - (void)viewWillAppear:(BOOL)animated
    {
    
        [super viewWillAppear:animated];
    }
    
        3
  •  1
  •   Bhavesh Nayi    9 年前

    您可以在视图控制器中尝试以下操作:

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

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

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

    类似 viewWillAppear ,在视图从屏幕上消失之前调用此方法。就像 视图将出现 ,此方法可以在视图控制器对象的生命周期内多次调用。当用户导航离开屏幕时,可能会关闭屏幕,选择另一个选项卡,点击显示模式视图的按钮,或在导航层次结构中进一步向下导航时,调用

        4
  •  0
  •   nilam_mande    9 年前

    viewDidLoad 当ViewController首次加载到内存中时,只调用一次。在这里,您希望实例化任何实例变量,并构建在此ViewController的整个生命周期中运行的任何视图。然而,此时视图通常还不可见。

    然而 viewWillAppear 每次出现视图时都会调用。