【问题标题】:Understanding UIViewController hierarchy了解 UIViewController 层次结构
【发布时间】:2011-09-19 02:09:21
【问题描述】:

好的 - 我的大脑此刻正在被烧毁,所以任何帮助都将不胜感激。

我的应用中有多个UIViewController 的子类。让我们打电话给他们VC_A, VC_B, VC_C, VC_D

用户通过触摸每个视图上的按钮进行交互。

所以我的 AppDelegate 在 VC_A 中添加:

//Add the view controller's view to the window and display.  
[self.window addSubview:viewController.view];  
[self.window makeKeyAndVisible];  

VC_A 然后使用presentModalViewController 加载VC_B:

    VC_B *tempView = [[VC_B alloc] initWithNibName:@"temploadingscreen" bundle:nil];
    [self presentModalViewController:tempView animated:NO];
    [tempView release];  

直到我得到 ​​p> 的层次结构

VC_A 
- VC_B  
    - VC_C  
       - VC_D  

但是当我在 VC_D 上调用 presentModalViewController 将我带到 VC_C 时,我希望它是 VC_C 的新实例,而不是原始实例。

所以我的问题是你如何去做 - 我需要使用[self dismissModalViewControllerAnimated:NO]; 来删除视图的旧实例。

任何帮助将不胜感激,因为我已经对此进行了搜索,但所有教程和东西都使用导航栏来控制导航 - 由于应用程序的类型,我不能使用导航栏。在 UIViewControllers 的新实例之间正确移动的任何工作代码示例都会很棒。

【问题讨论】:

    标签: iphone objective-c uiviewcontroller hierarchy presentmodalviewcontroller


    【解决方案1】:

    只需使用

    创建一个新实例
    ViewController_C *newVC_C = [[ViewController_C alloc] init]
    [self presentModalViewController:newVC_C animated:NO];
    [newVC_C release];
    

    【讨论】:

    • +1。您可以同时拥有同一个类的多个实例。可以这样想……你的每个视图控制器都是 NSObject 的子类,但你一次实例化的远不止一个。
    • 因为我需要循环很多次,所以我决定采用不同的方法 - 一旦我能够回答我自己的问题(必须等待 8 小时),我将在答案中附上指向示例项目
    【解决方案2】:

    我决定以一种完全满足我需要的不同方式来做这件事。

    我所做的是在 xib 和 viewDidAppear 方法中创建了基本 ViewController,我根据全局 NSNumber 的值调用了其他 viewController(使用 presentModalViewController)。

    因此,当我转到任何其他视图控制器而不是它们调用另一个视图控制器时,它们只需设置全局变量来指示要加载哪个视图,然后关闭当前视图(使用dismissModalViewController)。

    这样,每个 viewController 实例都会关闭并释放内存。

    我已经创建了一个示例项目并放在了github上https://github.com/sregorcinimod/Open

    只需查看下载内容,您就会在那里看到它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2019-02-03
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多