以编程方式创建新视图并对其进行管理

时间:2012-04-26 08:42:38

标签: iphone objective-c ios

我是Objective-C的新手,我开始研究具有一些View的应用程序。我想以编程方式100%创建它们而不使用XIB个文件。我知道我必须为我的屏幕创建ViewControllers课程,但我想问你如何使用它来管理导航。假设我有一个ViewController,其中包含tableView。我想创建一个下一个屏幕。所以我理解row类调用

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

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

3 个答案:

答案 0 :(得分:3)

在您的情况下,当选择一个单元格时,您会:

  • 创建下一个视图控制器的新实例
  • 在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]

}

答案 1 :(得分:2)

请务必阅读Apple的文档:View Controllers Programming Guide

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

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

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

请务必阅读Apple的代码示例(有些样本非常薄,因此很容易理解)。

答案 2 :(得分:-1)

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