帮助如何从UIViewController加载UINavigationViewController

时间:2009-06-19 23:16:46

标签: iphone objective-c

这又是一个愚蠢的问题:( 我正在尝试创建一个示例应用程序,在应用程序加载时加载UIViewController,并且视图包含一个加载UINavigationViewController的按钮。

现在,我使用“基于窗口的应用程序”创建了一个项目,并在项目中添加了“.mt,.h和.xib”中的“RootViewController”。

接下来,我在“RootViewController.xib”文件中添加了一个视图和一个按钮,它运行正常。之后,我添加了“UIViewController子类”文件,命名为“NavViewController”,包含.h,.m和.xib文件。

另外我添加了 - (IBAction)buttonPressed :( id)发送者函数在“RootViewController”类中加载NavigationViewController。

以下是“buttonPressed:”的代码。

- (IBAction)buttonPressed:(id)sender {
    NavViewController *navViewController = [[NavViewController alloc] initWithNibName:@"NavViewController" bundle:nil];
    self.navController = navViewController;
    [self.view insertSubview:navViewController.view atIndex:0];
    [navViewController release];
}

当我“构建并开始”时,它最初运行正常,直到我按下按钮。当我按下按钮时,程序会终止它。

我做错了什么?请帮忙......

谢谢。

3 个答案:

答案 0 :(得分:1)

你做错了什么?以非标准方式设计您的应用程序 - 您不应该这样做 - NavigationController负责!

为什么你会有一个按钮然后添加一个导航控制器? - 这违反了用户界面指南。我发现开始时很难掌握界面指南,但你必须这样做,因为它会让你的应用程序更加实用。

如果您需要导航控制器,则将其添加到视图中以开始 - 或使用导航控制器创建新视图。老实说,尝试一下,你会觉得用户界面感觉好多了。

如果您真的想要一个向窗口添加导航控制器的按钮,请执行以下操作:

  1. 在代码中保留对AppDelegate的引用
  2. 使用此引用并将当前视图控制器传递给名为reloadMainViewWithNavBar的方法:(UNViewController *)viewController
  3. 这个新方法应该删除旧的mainViewController并创建一个NavigationController 使用viewController作为根视图控制器
  4. 将导航控制器视图添加到窗口视图

答案 1 :(得分:0)

navController在笔尖中没有设置视图。 UINavigationcontroller需要一个根视图。在笔尖中,将导航控制器连接到另一个视图控制器。

答案 2 :(得分:0)

除了上面提到的修复,你真正想做的是创建导航控制器中包含的第一个视图控制器 - 但隐藏导航栏直到按下按钮导致它取消隐藏。您无法轻松地将导航控制器添加到您所在的视图中。