想要创建一个酷炫的静态UI,但是遇到了问题:“静态表视图仅在具有根视图控制器的故事板中有效…”

24
我正在创建一个如下所示的视图:
```

enter image description here

```
为此,我尝试使用Storyboard,在其中添加了2个TableView(都作为'Static Cells'),然后我直接从Storyboard手动添加我的Cell内容...
在我的Storyboard中,它看起来非常好,但是当我构建时,我会得到以下错误信息:
``` en.lproj/MainStoryboard.storyboard: error: Illegal Configuration: Static table views are only valid when embedded in UITableViewController instances ```
我该如何修复这个错误?

21
图片已经消失了。这没有什么用。为什么不通过直接上传图片到Stack Overflow来集成图片呢? - brainray
1
这个链接里有一个很好的答案: https://dev59.com/1WEh5IYBdhLWcg3wdzaR - Sruit A.Suk
4个回答

34
我在更改现有的自定义视图控制器,将其扩展为UITableViewController时遇到了问题。XCode不够智能化,无法意识到它已经符合要求。
您可以通过编辑故事板源代码,并将更改为来解决此问题。
原始来源:https://plus.google.com/108665969482300807329/posts/J4mCASMA3pZ

1
不要忘记更改关闭的 </viewController> XML 标签,以避免不匹配! - Jeff
4
我尝试在 Xcode 5.1 中这样做,但不再有效。 我收到了以下错误提示:“无法打开文档“MainStoriboard.storyboard”。无法验证文档内容。”现在将其改为动态方式似乎是唯一的方法。 - Homam
似乎是不好的做法。 - Todd Hopkinson
在 Xcode 6 中,您需要首先删除Storyboard上的“view”,否则将无法使用Interface Builder打开Storyboard。 - Allen
这在Xcode 7中仍然适用。三年后了,感谢您!话虽如此,下面@Radu的回答似乎没那么繁琐。 - Bilal Akil
1
仍然适用于Xcode 9...如果您只是意外地将普通控制器拖放到故事板上并进行了一些添加,然后意识到您已经拖放了一个表视图控制器,而且不想重新开始,那么这不是一个黑客行为。 - Joe Maher

22
将一个UITableViewController添加到您的视图中。它应该容纳一个UITableView。将其定义为静态表视图,并使其分组。添加两个部分,一个有一行,另一个有两行。再次将标签、按钮和滑块添加到行中。
我不知道为什么您要在这里使用两个UITableView?

好吧,看来这是获得这种“风格”的唯一方法,而不必创建自定义内容,不是吗? - Cehm
很可能是苹果在Storyboard中实现了静态表格功能,但由于在UITableViewController之外定义它时会收到错误消息,这肯定表明他们在背后编写了支持这种行为的代码。我建议始终使用控制器来处理UITableView,因为这样可以免费获得许多东西。 - Øystein
太棒了!我刚按照你说的做了,效果非常好。 - Cehm
15
补充说明:将视图控制器的类更改为UITableViewController是行不通的(与自定义类继承它相同)。唯一有效的方法是拖动一个新的UIViewController到storyboard中。 - johnlinvc

4
唯一使Xcode 6中此功能正常工作的方式,也是苹果公司打算使用的方式是在容器视图中嵌入一个TableViewController。如果必须要这么做的话,似乎不能像juanignaciosl所描述的那样进行黑客攻击。
因此,步骤如下:
1. 创建一个表视图控制器。 2. 用你“有问题”的视图控制器中的表格(包括所有静态单元格等)替换该控制器中的表格。 3. 如果你的表视图是更复杂的UI的一部分,并且不是你的视图控制器的主要视图,则继续以下步骤: 4. 在你的“有问题”的视图控制器中创建一个容器视图,与你现在移动的静态表视图处于同一位置。这也会自动创建另一个视图控制器和一个segue——删除它们。 5. 从容器视图向包含你的静态表格的tableviewcontroller进行左键拖动或ctrl拖动,并选择嵌入。
这不像以前那样好,因为你的表视图被剥离到接口生成器中的一个单独的视图控制器中,这可能对你现有的代码和输出产生影响。但对于大型静态表格来说,这是比动态生成所有内容更好的选择。

2
你可以将其设置为动态并关闭滚动:
[yourTableName setScrollEnabled:NO];

这就是我最终做的...有点笨拙,但解决了我的问题。谢谢! - Reid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接