将子视图添加到视图层次结构中

时间:2009-05-25 15:09:14

标签: iphone cocoa-touch uiview uiviewcontroller uiscrollview

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

主窗口

-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成为层次结构中的顶视图?

2 个答案:

答案 0 :(得分:2)

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

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

如果您实际拥有navigationController,这是正确的。确保你真的这样做。当Cocoa中“没有任何反应”时,它通常意味着什么是零。您应该检查调试器或NSLog()以查看这些值中的任何值是否为零。您的父母可能(甚至可能)有一个navigationController,但您没有。

班级应始终拥有领先资本。不要创建一个名为“view”的变量,该变量属于“UIViewController”类。这是痛苦的必由之路。 Objective-C是一种动态语言,对类型进行有限的编译器检查。正确命名对于ObjC中的有效编程至关重要。

答案 1 :(得分:1)

根据您对上一个答案的评论,您想要提供一个模态视图。您可以通过创建新视图“modalView”并调用[topView presentModalViewController:modalView animated:YES]来完成此操作。

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