如何在UIViewController上没有NavigationController的情况下推送DetailView

时间:2012-02-24 22:58:03

标签: iphone ios xcode uitableview uinavigationcontroller

我有一个基于ViewBased的应用程序。我在其中一个UIViewControllers上添加了一个UITableView。它显示了数据并且我实现了所有委托方法等。我的问题是当我想要显示detailView时它不会发生。我的代码:

   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
       DetailViewController *detailViewController =[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

       NSLog(@"DidSelectRowAtIndexPath");

        // Pass the selected object to the new view controller.
        [self.navigationController pushViewController:detailViewController animated:YES];
        [detailViewController release];
    }

我看到我需要一个navigationController,但我没有一个,而且我没有尝试以编程方式添加一个。我的appDelegate中也没有一个,所以我的问题是我需要添加一个来显示详细信息视图吗?如果是,请给我一个代码示例如何做到这一点。 如果没有,还有其他什么方式?

我是iOS的新手,所以我在这里有点迷失。 请帮忙!

3 个答案:

答案 0 :(得分:1)

要以编程方式为此详细视图添加导航控制器,您需要这样的内容:

UINavigationController * controller = [[UINavigationController alloc] initWithRootViewController:detailViewController];

[[detailViewController] release];

[self presentModalViewController: controller animated: YES];

如果你想使用pushViewController,你需要在你正在开始的视图周围有一个导航控制器。

答案 1 :(得分:0)

您需要先添加导航控制器,然后您的主表成为导航控制器的根视图控制器,然后当您点击表中的一行时,将另一个视图控制器推送到导航堆栈。

您的主表如何首先进入应用程序?如果您正在使用笔尖,只需更换导航控制器的视图控制器,并将旧视图控制器添加为导航控制器的子窗口,这是非常容易的。

答案 2 :(得分:0)

您可以通过在app app委员的application:didFinishLaunchingWithOptions:方法中进行编程来创建一个,如下所示:

UITableViewController *tableViewController = [[[WhateverYourSubclassVCIsCalled alloc] init] autorelease];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
window.rootViewController = navController;
[window makeKeyAndVisible];