iOS 7:在一般的 ViewController 中使用static cell

来源:互联网 发布:java入门书籍推荐排行 编辑:程序博客网 时间:2024/05/01 07:32

毫无疑问,我们从来没有像这样喜欢过故事板。从 iOS 5 开始,苹果在其新的IDE版本中提供了故事板编辑器,并在故事板编辑器中“升级”了其 Object Library,尤其是UITableView。新的 UITableView 除了可以用传统的 DataSource 编程方式提供 cell 外,还有两种可以不离开 ViewController设计界面对其进行UI设计的单元格:模板单元格和静态单元格。

前者毋庸多说,一旦你使用过它,就不会再离不开它了。而对于后者,一直存在着一个巨大的缺陷——静态单元格只能在SDK内置的 UITableViewController  中使用,如果在程序员自己的ViewController中,静态单元格根本不会显示,甚至于编译器会提示错误信息:“Illegal Configuration: Static table views are only valid when embedded in UITableViewControllerinstances”。

这确实是一件令人遗憾的事情,但是苹果至今(Xcode 5)没有在其提供的 IDE 中解决这个缺陷。

这个问题怎么解决?我们确实需要在自己的 ViewController 中使用静态单元格。

我们可以从 Xcode4.5 以后的 Container View 中得到启发。借助于Xcode4.5.1 之后提供的 ContainerView,我们可以将一个包含有静态单元格的UITableViewController “嵌入”到自己的 ViewController中。

具体步骤如下:

1、在故事板中拖入一个常规的 TableViewController 。

2、在这个 TableViewController 中使用静态单元格。


3、在故事版中拖入一个常规的 ViewController 。

4、在这个 ViewController 中拖入一个 Container View。

5、这个 Container View 会自动带有一个 segue 指向另一个 ViewController。将 segue 和那个ViewController 都删除。

6、右键(或ctrl+左键)从 Container View 拖一条线到 TableViewController,然后在弹出的菜单中选择 Embed。

这样,当运行程序时,那个普通的ViewController 中会显示 TableViewController 中内容,即在自己的 ViewController中使用了静态单元格。

但是,Embed segue 只在 iOS 6 以后有效。为了和 iOS 5 兼容,你也可以使用下列代码来“嵌入”UITableViewController到一个常规的 ViewController 中:

- (void)viewDidLoad

{

    [superviewDidLoad];

self.tableVC=[self.storyboardinstantiateViewControllerWithIdentifier:@"DerivedTableViewController"];

    [self.containerViewaddSubview:_tableVC.view];

}

这里,self 是 ViewController,self.tableVC 是 UITableViewController,self.containerView是 self 的 subview。


1 1