【问题标题】:Popping not sufficient to remove a view controller弹出不足以删除视图控制器
【发布时间】:2014-04-14 03:19:59
【问题描述】:

我遇到了一个问题,我认为这是由于我错误地删除了我的视图。我将尝试解释并希望所有人都能遵循。 我有一个UISplitview 应用程序,它基本上有两个视图。主要细节视图,以及本质上是地图的视图。在表中选择某个字符串后,调用此代码(此代码在详细视图中,但rainObject 是从UIViewController 传入的。

-(void)setReceivedRainObject:(id)receivedRainObject{
    if ([receivedRainObject isEqualToString:@"Test"]){
        mapViewController *mapView=[[mapViewController alloc]initWithNibName:@"mapViewController" bundle:nil location:0];
        [self.navigationItem setHidesBackButton:NO animated:NO];
        [self.navigationController setNavigationBarHidden:NO animated:YES];
        [self.navigationController pushViewController:mapView animated:NO];
    }
}

所以上面的代码按预期在细节屏幕中加载了我的地图。 但是,当我从左侧视图控制器单击第一个选项(测试)时,它会调用一个新的视图控制器(viewcontroller2 具有名为 test2 的行)并且第二个控制器调用第三个(viewcontroller3 具有名为 test3 的行) 在 viewcontoller3 的 viewDidDisappear 和测试的 viewWillAppear 上我有这个代码

 [self.detailViewController.navigationController popViewControllerAnimated:NO];

所以当我深入到 viewcontroller 时,当我单击后退按钮时,它会弹出一个地图,而当 testview 加载时它会弹出第二个。让我的详细视图显示我是如何开始的。 但是,我注意到,如果我单击“测试”按钮两次并尝试返回,则会出现一个“额外的屏幕”,应该用 pop 删除。想知道如何删除这么多视图或阻止程序添加这么多视图。 谢谢

【问题讨论】:

  • 您获得了额外的屏幕,因为您已按两次 mapView - 每次触摸测试按钮一次。我不确定您要实现什么导航,但对我来说听起来不正确。听起来您的按钮应该只在详细视图中显示一个新的视图控制器,而不是按下它。在ViewWillAppearviewDidDisappear 中调用popViewController 无疑为我敲响了警钟。如果通过您的应用导航不使用视图堆栈,请不要使用导航控制器
  • @Paulw11 当我单击按钮时,我的按钮必须显示带有地图的视图,否则如何在不推动的情况下完成此操作。呈现和推动之间有什么区别。其次,当我完成它时不会弹出你做什么来摆脱它?
  • 您不必使用导航控制器。你在使用故事板吗?如果是这样,您可以在基本 detailviewcontroller 和新控制器之间创建一个替换 segue,为其命名,然后使用 [detailViewController performSegueWithIdentifier:] 触发它
  • 弹出是您对导航控制器所做的事情,因为它是一堆视图,但它不是在应用程序中管理视图的唯一方法,如果您的应用程序不是自然地导航为堆栈视图然后它可能会妨碍
  • 无论堆栈多深,它都会弹出到根视图控制器。导航控制器不会保留视图。它们是否真正被释放取决于任何其他对象是否仍然持有引用。您可以在应用程序运行时在 XCode 中查看内存图,或使用 Instruments 工具监控内存使用情况并查看对象是否“滞留”

标签: ios objective-c uiviewcontroller


【解决方案1】:

随便用

mapViewController *mapView=[[mapViewController alloc]initWithNibName:@"mapViewController" bundle:nil location:0];
[self.navigationController pushViewController:mapView animated:YES];

浏览视图控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多