Xcode 情节提要:无法将视图添加到 ViewController

Xcode Storyboard: Can't add View to ViewController

我正在使用 Xcode 10(Swift 5 和 iOS 12),我的应用目前设置如下:

  1. UIViewController 1(登录屏幕)- segue12 到 ->
  2. NavigationController 自动创建
  3. UIViewController 2 带有 UITableView - segue23 到 ->
  4. UIViewController 3(有关 UITableView 中带有自动创建的“后退”按钮的项目的详细信息)

NavigationBar只包含一个“”。

我现在想添加另一个 UIView,在 UITableView 下面有一个按钮,但是 Xcode 不允许我将它拖到 UITableView 下面,只能拖到 UITableView 下面UITableView 或“First Responder”正下方,它将外部视图放入其自己的 window.

如果我删除“我的 Table 视图”,它也不会让我拖入替换项。

我该如何解决这个问题,以便我可以添加新的 UIView + UIButton

NavigationController that automatically created UIViewController 2

这说明了一切。当你把一个导航控制器拖到故事板中时,你得到的是一个导航控制器和它的根视图控制器,而根视图控制器是一个UITableViewController。

让我们退后一步。一个视图控制器可以而且必须只有一个主视图。它占据了整个场景。它不能调整大小。它不能有兄弟视图,因为它没有父视图,兄弟视图是 child 的。它只能有children(子视图)。

嗯,在这种情况下,ViewController2 是一个 UITableViewController,而 MyTableView 是 ViewController2 的主视图。 (table 视图控制器总是以这种方式配置,这就是将导航控制器拖到情节提要中时得到的结果。)这就是为什么不能向其添加更多视图的原因,子视图除外,例如原型单元格内容。除了 内部 table 视图之外,您的按钮无处可去。

那么,怎么办?

  • 如果你要添加的额外界面只是一个按钮,通常的解决方法是将其放入导航栏。它成为 table 视图控制器导航项的一部分。

  • 如果您不想这样做——也就是说,如果您真的希望按钮和 table 视图在界面中成为彼此的兄弟姐妹——那么您需要用 普通 视图控制器替换 ViewController2 本身。现在它的主视图将是一个普通视图,你可以将任何你喜欢的东西拖进去,包括一个 table 视图和一个按钮。更有可能的是,您将使用 容器视图 ,而不是裸露的 table 视图,将 embed segue 嵌入到 table 视图控制器。