顶级栏不会出现在presentModalViewController中

时间:2011-09-01 01:23:32

标签: objective-c ios xcode interface-builder xib

我创建了一个名为addItemToListViewController的UIViewController子类。我选择了添加“xib”,只是创建了一个带有几个标签和textField的简单页面。在界面构建器中,我选择了“顶栏 - 导航栏”,以便在应用程序运行时将其放入堆栈时,它将具有与初始主窗口匹配的顶栏。在“界面”构建器中,它显示顶部边框,但是当我在模拟器中运行应用程序时,一旦显示视图,顶部栏就不存在。

这是我放在rootViewController中以呈现视图控制器的代码

- (IBAction)addButtonPressed:(id)sender 
{   
    AddItemToListViewController *addItemToListViewController = [[AddItemToListViewController alloc] initWithNibName: @"AddItemToListViewController" bundle:nil];

    [self presentModalViewController: AddItemToListViewController animated: YES];
    [AddItemToListViewController release];
}

如果我手动将导航栏添加到xib,我只能显示顶部栏。如果我必须向我的xib添加导航栏,“Top Bar”属性的目的是什么?

3 个答案:

答案 0 :(得分:5)

- (IBAction)addButtonPressed:(id)sender 
{   
    AddItemToListViewController *addItemToListViewController = [[AddItemToListViewController alloc] initWithNibName: @"AddItemToListViewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addItemToListViewController];
    [self presentModalViewController: navController animated: YES];
    [AddItemToListViewController release];
    [navController release];
}

答案 1 :(得分:4)

InterfaceBuilder中的“顶栏 - 导航栏”就是所谓的“模拟度量”。当其他可视元素(状态栏,导航栏或标签栏)可能消耗设备的某些屏幕空间时,它可以帮助您以正确的间距布置视图。除了缩小NIB定义的视图的垂直尺寸之外,它实际上没有做任何其他事情。目的是帮助您布局视图,而不是实际创建将在您的应用中显示的组件。

如果您想要导航栏,那么您有两个选择。第一种选择是使用导航控制器(您的初始视图必须是根)并调用

[self.navigationController pushViewController:newVC animated:YES];

正确设置导航控制器等的过程非常重要,您应该进行一些搜索,以找到为您的应用程序执行此操作的最佳方法。对于一个简单的应用程序,特别是如果您刚刚学习iOS,您可以在创建新项目时使用“基于导航的应用程序”模板。使用navcon,您可以获得通常与顶部栏相关联的所有奇特行为 - 自动后退按钮,转换到详细视图时的左/右滚动等等。

第二个选项是使用导航栏对象在详细视图中放置“假”导航栏。您可以在XCode的“实用工具视图”(最右侧窗格)的下半部分找到该对象以及一些其他相关对象。只需将对象拖动到XIB和blammo中,就会有一个44像素高的灰色条。此导航栏就像您使用导航控制器时获得的那样,除了您没有获得堆栈功能;您仍然可以向左和向右添加按钮,更改标题,将其着色为特定颜色等。

答案 2 :(得分:1)

xib不知道您将使用控制器作为模态视图,因为它也可以用于可以显示顶部条的普通视图。只有当您按下视图时,它才会使用或忽略此顶部栏的显示。

简而言之:如果您将xib用于普通视图,那么它就在那里:)