如何在UIViewController中嵌入的UITableView中可视化地创建和使用静态单元格

Sti*_*uck 53 objective-c ios xcode4.2

我正在使用XCode 4.2,并使用Storyboard构建了我的UI.我需要创建一个包含UITableView上方和下方内容的视图,我可以使用UIViewController实现这一点.UITableViewController不允许您在表格上方或下方添加内容.您可以使用表格页眉/页脚,但这不适用于我想要实现的目标.

我现在有一个嵌入了UITableView的UIViewController.我可以相应地调整UITableView的高度和宽度,这为我提供了我正在寻找的UI布局.

我可以在UITableView中自定义静态单元格,但是当我尝试构建时,我收到以下错误:

非法配置:静态表视图仅在嵌入UITableViewController实例时有效

我的问题是其他人如何解决这个问题?使用静态单元格创建一个tableview并在视觉上进行布局非常好,但显然由于某些我无法理解的原因而不允许这样做.由于我的视觉布局要求,我无法切换到UITableViewController.

任何帮助将不胜感激.

Ped*_*eno 134

假设您的应用程序针对iOS 6+,您可以在Xcode 4.5及更高版本中实现此目的.

在Storyboard中,只需在其主视图中创建一个带有View容器的UIViewController.然后将View容器连接到包含静态单元格的UITableViewController.

像这样:

在此输入图像描述

您不需要一行代码.只需控制点击,拖动并选择嵌入即可.视图控制器包含是为您处理的.

  • 为初学者添加一些额外帮助:(1)在Interface Builder中的主视图控制器上放置一个Container View.(2)在故事板中添加UITableViewController.(3)按住Control键并从容器视图中单击并拖动到UITableViewController.(4)选择嵌入. (15认同)
  • 如果您的视图控制器_is_从子类的UITableViewController和你仍然得到这个警告,你并不需要/想一个容器,然后看到这个帖子就如何解决办法:https://plus.google.com/105709083169353686738/posts/VidCrsYPhgv(需要手动编辑故事板文件.) (3认同)
  • 对于所有遇到同样困难的人.如上所述使用"查看容器"而不是"视图"(希望有帮助);) (3认同)
  • 这应该标记为正确的答案.快速,简单,甚至包括图像. (2认同)

Can*_*pus 5

你是对的.在storyboard中,你不能在viewController中嵌入带有静态单元格的tableView.解决它的一种方法(我自己没有尝试过,所以我不确定它是否有效)可以是你在静态单元格的故事板中创建一个UITableViewController实例.将一个UIView实例添加到viewController,然后以编程方式将UITableViewController的tableView加载到viewController的UIView中.


Ken*_*Toh 5

pmd的答案有效,但如果还需要向后兼容iOS 5,您可以使用View Containment API以编程方式进行嵌入.

在您的父UIViewController的viewDidLoad方法中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    MyTableViewController* vc =[storyboard instantiateViewControllerWithIdentifier:@"MyTableVC"];
    [self addChildViewController:vc];
    [self.view addSubview:vc.view];

    // ensure embedded view is aligned to top
    CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    vc.view.frame = frame;

    [vc didMoveToParentViewController:self]; 
}
Run Code Online (Sandbox Code Playgroud)

不要忘记使用静态单元格为UITableViewController指定故事板ID.