如何以可视方式创build和使用embedded在UIViewController中的UITableView中的静态单元格

我正在使用XCode 4.2,并使用Storyboard构build了我的UI。 我需要创build一个具有UITableView上下的内容的视图,我可以通过使用UIViewController来实现。 UITableViewController不允许你在表格的上面或下面添加内容。 您可以使用表头/页脚,但不符合我想达到的目的。

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

我可以自定义UITableView中的静态单元格,但是当我尝试构build时出现以下错误:

非法configuration:静态表视图只有embedded到UITableViewController实例中才有效

我的问题是其他人如何解决这个问题? 用静态单元格创build一个tableview并把它们放在视觉上是非常好的,但显然这是不允许的,因为某些我无法理解的原因。 由于我的可视布局要求,我无法切换到UITableViewController。

任何援助将不胜感激。

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

您可以在Xcode 4.5及更高版本中实现这一点,假设您的应用程序针对的是iOS 6+。

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

像这样:

在这里输入图像说明

你不需要一行代码。 只需控制点击,拖动并selectembedded。 视图控制器包容是为您处理的。

pmd的答案是有效的,但是如果需要向下兼容iOS 5,则可以使用View Containment API以编程方式进行embedded。

在父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]; } 

不要忘记用静态单元格为你的UITableViewController指定一个故事板ID。

我知道这是一个老问题,但我对这个问题有一个很好的解决scheme。

我需要UIViewController 3静态单元格,所以这就是我所做的:

  1. 将一些表格视图单元格拖到你的界面(而不是UITableView) – 添加文本和任何你需要的东西。
  2. 为您的细胞制作IBOutlet属性并合成它们。
  3. 拖动一个button,使其覆盖整个单元格。 设置button以键入“自定义”,使其看起来不可见 – 重复所有单元格
  4. 将数字标签添加到您的button
  5. 实现以下function。 buttonDown连接到button“Touch Down”事件。 buttonUp连接到“Touch Up Inside” “Touch Up Outside”

     -(IBAction)buttonDown:(id)sender { if ([sender tag] == 1) { myFirstCell.selected = YES; } else if ([sender tag] == 2) { mySecondCell.selected = YES; } else if ([sender tag] == 3) { myThirdCell.selected = YES; } } -(IBAction)buttonUp:(id)sender { myFirstCell.selected = NO; mySecondCell.selected = NO; myThirdCell.selected = NO; } 

你可以在buttonDown事件中做任何你喜欢的事情,并使用button直接进入新的视图。 我觉得这很有用。

我不知道静态单元是什么意思,但是如果你试图在IB中构build单元,然后想在你的tableView中使用它,你可以做的是在你的cellForRowAtIndex你可以调用loadNibNamed传递您为单元格创build的.nib文件作为参数。 确保你的viewController中有一个outlet ,它映射到单元的.nib。 尝试探索这些方向,如果这是你想要实现的

您可以使其dynamic,然后切换滚动:

 [yourTableName setScrollEnabled:NO];