如何仅在代码中创建简单的表视图控制器

时间:2012-11-12 20:16:42

标签: objective-c ios xcode uitableview interface-builder

我的应用程序中需要多次使用相同类型的表视图控制器,并希望创建一个更通用的表视图控制器,我可以一遍又一遍地使用它。

这些表视图控制器非常简单,只显示数组的内容,在所选的表视图单元格中加上一个复选标记,并在{{1}之后将所选表视图单元格的索引返回给调用视图控制器已点击工具栏中的}按钮。

目前,我直接在Storyboard中创建这些表视图控制器中的每一个,并使用segues实例化它们。

是否可以仅在代码中执行此操作(不使用Storyboard或xibs)?

实例化并将它们推送到导航控制器堆栈的最佳方法是什么(每个都将在视图控制器中显示)。

enter image description here

2 个答案:

答案 0 :(得分:1)

  

是否可以仅在代码中执行此操作(不使用Storyboard或xibs)?

是。您可以在storyboard或.xib文件中执行任何操作,您可以在代码中执行此操作:

MyViewController *vc = [[MyViewController alloc] initWithNibName:nil bundle:nil];

注意:视图控制器的默认行为是,当您为.xib名称传递nil时,从.xib加载与视图控制器类相同名称的视图。 MyViewController.xib代表上面的示例。所以上面的代码在代码中创建视图控制器,但仍然会从.xib加载视图。如果您还希望以编程方式创建视图,请覆盖-loadView

答案 1 :(得分:1)

在代码中执行此操作非常简单。您可以像平常一样创建视图控制器类(扩展UITableViewController)。实现所有相同的表视图数据源和委托方法。所有这一切都是一样的。

如果您想使用表视图控制器,您只需:

MyTableViewController *vc = [[MyTableViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];

我会像这样定义您的MyTableViewController init方法:

- (id)init {
    if ((self = [super initWithStyle:UITableViewStyleGrouped])) {
        // any other initialization
    }

    return self;
}
BTW - 我有一个应用程序,其中包含100多个视图控制器,我从未使用过界面构建​​器或故事板。这都是代码。