【问题标题】:Adding a subview into view hierarchy将子视图添加到视图层次结构中
【发布时间】:2009-05-25 15:09:14
【问题描述】:

我希望在用户单击按钮时显示视图。我的层次结构如下所示:

主窗口

-UIView
--ScrollView
---ScrollView.pages = UIViews
----UIView (from above assignment)
----TextView
----InfoButton

pages 是 pageController 对象的 NSMutableArry。这些钩在笔尖上。这些笔尖是用户在滚动视图中浏览的页面。

InfoButton 点击​​是这样连接的:

- (IBAction) infoButton_click:(id)sender{
topView topViewViewController *topView = [[topViewViewController alloc] initWithNibName:@"TopView" bundle:[NSBundle mainBundle]];
//[self.navigationController pushViewController: topViewView animated:YES]; 
//[self.view addSubview: topViewView.view];
[super.view addSubview: topViewView.view];
[topViewView release];
}

InfoButton 位于 ScrollView 中的某一页上。我已经注释掉了已经尝试过的不同代码。它都没有添加视图。没发生什么事。有没有办法让 TopView 作为层次结构中的顶视图?

【问题讨论】:

    标签: iphone cocoa-touch uiview uiviewcontroller uiscrollview


    【解决方案1】:

    您的目标是将视图添加为子视图,还是使用导航控制器在新视图上滑动?我暂时假设后者。

    - (IBAction)infoButton_click:(id)sender
    {
        TopViewController *topViewController = [[TopViewController alloc] initWithNibName:@"TopView" bundle:nil];
        [self.navigationController pushViewController:topViewController animated:YES]; 
        [topViewController release];
     }
    

    如果你真的有一个navigationController,这是正确的。确保你确实做到了。当 Cocoa 中的“什么都没有发生”时,通常意味着某事是零。您应该检查调试器或使用NSLog() 来查看这些值是否为 nil。有可能(甚至很可能)你的父母有一个 navigationController,但你没有。

    类应该总是有一个领先的资本。不要创建一个名为“view”的变量,它属于“UIViewController”类。这是通往苦难的必经之路。 Objective-C 是一种动态语言,编译器对类型的检查有限。正确命名事物对于在 ObjC 中进行有效编程至关重要。

    【讨论】:

    • 这是在 iPhone (Cocoa Touch) 上。它不是导航控制器。它是一个基于视图的应用程序。正如我的 OP 中所述,我已经尝试了您显示的代码,但它不起作用。
    • 那么你的实际目标是什么?您希望“TopView”如何出现?它应该是现有滚动视图的一部分(如果是,在哪里?),它应该从下方滑动还是要向右滑动才能看到它?这里不清楚 ScrollView.pages 在您的图表中是什么。是“超级”这个“页面”还是实际的 UIScrollView?
    • 我想按下信息按钮并显示另一个视图。如果它可以像《星际迷航》应用程序中出现翻转,那就太好了。但是滑进去就好了。一旦该视图出现,用户就不能再滑动/滑动了。这是一个设置/信息视图。所以我认为它可能不再是 UIScrollView 的一部分。然后用户将单击完成并返回到滚动视图。我已经编辑了 OP 来描述页面是什么。不确定“超级”问题。也许这些澄清会有所帮助。请告诉我。谢谢。
    • 我不熟悉星际迷航应用程序,但您所描述的称为模态视图控制器:developer.apple.com/iphone/library/featuredarticles/…
    【解决方案2】:

    根据您对上一个答案的评论,您想要呈现一个模态视图。为此,您可以创建一个新视图“modalView”并调用[topView presentModalViewController:modalView animated:YES]

    在 iPhone OS 的未来版本中,如果它在 NDA 下我当然无法评论,您可以通过在视图控制器上设置属性来呈现具有翻转过渡的模态视图控制器要呈现,可能会称为modalTransitionStyle 或类似的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多