1

我是 Objective-C 的新手,我开始研究将有几个 View 的应用程序。我想在没有XIB文件的情况下以编程方式 100% 创建它们。我知道我必须ViewControllers为我的屏幕创建我的类,但我想问你如何使用它来管理导航。假设我有一个ViewController包含tableView. 我想创建下一个屏幕。所以我明白rowtableViewController课堂上打电话

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //... }

但是下一个屏幕呢?我还没有。我应该创建一个“准备好的”ViewController类吗?在这种情况下如何处理导航?

4

3 回答 3

3

In your case, when a cell is selected, you would:

  • 创建下一个视图控制器的新实例,
  • 将这个新实例推送到 UINavigationController 堆栈上。

因此,首先,您需要确保您的第一个视图控制器(带有表格视图的那个)包含在 UINavigationController 中。

// AppDelegate, in applicationDidFinishLanching:

UIViewController *firstViewController = [[[MyCustomTableViewController alloc]
                                          initWithNibName:nil bundle:nil]
                                         autorelease];
UINavigationController *navigationController = [[[UINavigationController alloc]
                                                 initWithRootViewController:firstViewController]
                                                autorelease];

[self.window setRootViewController:navigationController];

然后,当您选择表格视图中的一个单元格时,您可以编写:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *nextViewController = [[[MyNextViewController alloc]
                                             initWithNibName:nil bundle:nil]
                                            autorelease];

    [self.navigationController pushViewController:nextViewController
                                         animated:YES]

}
于 2012-04-26T08:52:23.560 回答
2

确保您阅读了 Apple 的文档:View Controllers Programming Guide

基本上,您必须将表视图控制器(作为内容视图控制器)嵌入导航控制器(容器视图控制器)中。

然后在 -tableView:didSelectRowAtIndexPath: 中,您将实例化一个新的内容视图控制器,并通过带有此类消息的导航控制器将其推送到您当前的表视图控制器上:

[[self navigationController] pushViewController:<#myNextViewController#> animated:YES];

一定要阅读来自 Apple 的代码示例(有些很薄,所以很容易理解)。

于 2012-04-26T08:53:51.727 回答
-1

我讨厌 IB,并且尝试在没有它的情况下制作应用程序时遇到了一些麻烦,但是它是如此嵌入到工作流程中,以至于我发现咬紧牙关使用它更容易。但是,有些帖子在不同程度上描述了如何在没有 IB 的情况下进行开发,例如:

于 2012-04-26T08:56:40.150 回答