【问题标题】:How to push DetailView without NavigationController on UIViewController如何在 UIViewController 上推送没有 NavigationController 的 DetailView
【发布时间】:2012-03-15 09:41:06
【问题描述】:

我有一个基于视图的应用程序。我在其中一个 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 新手,所以我有点迷路了。 请帮忙!

【问题讨论】:

    标签: iphone ios xcode uitableview uinavigationcontroller


    【解决方案1】:

    要以编程方式仅为此详细视图添加导航控制器,您需要执行以下操作:

    UINavigationController * controller = [[UINavigationController alloc] initWithRootViewController:detailViewController];
    
    [[detailViewController] release];
    
    [self presentModalViewController: controller animated: YES];
    

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

    【讨论】:

    • 非常感谢!这对我有帮助!有没有办法像示例中那样使用 presentModalViewController 从右向左推送它?
    • 你可能会在这里找到类似的帮助:stackoverflow.com/questions/237310/…
    【解决方案2】:

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

    您的主表首先是如何进入应用程序的?如果您使用的是 nib,只需将视图控制器更改为导航控制器,并将旧视图控制器添加为导航控制器的子级,就非常容易。

    【讨论】:

    • 您能告诉我在哪里以及如何添加 navC 吗?我尝试添加它(请参阅我的代码),但它不起作用。我没有使用 UITableViewController,也没有在我的 appDelegate 中添加 navC。我正在使用笔尖并尝试添加 navC 但不知道如何将它们链接在一起... :-/
    • master是UITableViewController吗? UITableViewController 首先是如何显示的?
    【解决方案3】:

    您可以通过在您的应用程序委托的application:didFinishLaunchingWithOptions: 方法中以编程方式创建一个,如下所示:

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

    【讨论】:

    • 我没有使用 UITableViewController。我将代表添加到我的 ViewController。而且我没有“窗口”。这一切都在 viewControllers 中。有什么方法可以在不通过 appDelegate 的情况下将 navControler 添加到 VC 中?
    • 好吧,在这种情况下,只需使用您的子类名称代替 UITableViewController。而且你确实有一个窗口,不管你是否真的有一个把手。我相信当前的模板使用名称 _window 作为应用委托中的实例变量。
    • 我认为您正在考虑反向导航控制器和其他视图控制器之间的关系。导航控制器旨在包含其他视图控制器并通过推送和弹出它们来管理“堆栈”。因此,您希望某个类(通常是应用程序委托,或间接通过 XIB)创建并设置导航控制器,并将您自己的自定义视图控制器作为其根。
    猜你喜欢
    • 2014-09-11
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2011-04-10
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多