在现有的 UINavigationController 中插入 UIViewController

Posted

技术标签:

【中文标题】在现有的 UINavigationController 中插入 UIViewController【英文标题】:Insert a UIViewController in an existing UINavigationController 【发布时间】:2017-04-03 17:22:53 【问题描述】:

我正在开发一个应用程序(在带有 UI 构建器的 Swift 中),我在 UINavigationController 中嵌入了一个 UITableViewController,因此我可以显示有关行的详细信息,使用标准的“+”按钮向表中添加行等。在那时, UINavigationController 是故事板的入口点。

现在我想在情节提要中的 UITableViewController 之前添加一个登录屏幕作为 UIViewController,因此用户需要先登录,并在成功验证后被带到表格视图。我期望新的视图控制器应该嵌入到现有的导航控制器中(为了连续性,这对我来说很有意义)。但是,我不知道如何在不破坏现有导航的情况下在导航控制器中插入登录屏幕。我尝试了几种方法,例如从登录屏幕创建一个新的 segue 到表格视图,然后用登录屏幕替换导航控制器和表格视图之间的关系“根视图控制器”,但是当我这样做时,所有导航元素在表格视图和随后的屏幕(详细信息、数据创建)消失。

这样做有什么技巧吗,还是我必须重新创建整个导航逻辑?

谢谢!

【问题讨论】:

您打算如何从登录屏幕导航到表格视图? 不要插入登录屏幕。从顶视图显示它,以便用户在成功登录之前看不到顶视图。 @DonMag 我的尝试是使用登录屏幕类中的情节提要来实例化它,然后在按下“登录”按钮并检查正确的凭据时显示它。这样做会显示表格视图,但正如我所说,屏幕顶部的导航栏已经在表格视图上方消失了。 @maddy 这是标准的做法吗?不太确定,因为我还想允许用户例如从登录界面进入账户创建界面,或者在登录后显示表格之前显示用户信息等,感觉登录界面应该是导航过程中正确的一步,用户成功后可以跳过登录一次。 【参考方案1】:

听起来你是在正确的轨道上......不知道你哪里错了。

这将是(一种)有效的方法,并且应该给你你想要的。

编辑:还要注意,如果您通过代码导航,您希望将 ViewControllers 推送到导航堆栈上,而不是“呈现”它们。例如:self.navigationController?.pushViewController(tableViewController, animated: true)

从NavController开始... TableView是Nav的Root,DetailView显示在Table Row Select上:

删除“Root VC”连接,并在其间放置一个新的 ViewController - 现在应该如下所示:

TableView 和 DetailView 缺少顶部的 NavBar - 没关系。

现在,将 LoginView 连接为 Nav 的 Root,并将 Show segue 从 Login Button 连接到 TablView:

如果一切按计划进行,NavBar 将再次根据需要显示在 TableView 和 DetailView 的顶部。

【讨论】:

这正是我的第一个方法。但是,虽然导航栏重新出现在 UI 构建器中,但在我运行应用程序时它不会显示。此外,当我点击其中一个表格行时,详细视图以模态方式呈现(从下方)而不是“显示”(从右侧),尽管从行到详细视图的连接仍然是“显示转场” UI Builder 中的连接,详细视图也没有导航栏。 那么听起来你没有正确连接segues......你在连接“Show”吗?还是其他选项之一? 当您选择 segue 并查看 Attributes Inspector 时,如果您有正确的选项,您应该会看到“Show (e.g. Push)”。 两种类型(从登录屏幕到表格视图,从表格视图到详细视图)都属于“显示(例如推送)”类型。我没有第一个标识符,因为我没有实现 prepare(for:) 方法,因为我不需要将信息传递给 UITableViewController,你认为我应该吗? 导航栏在登录屏幕上是否可见?如果是这样,TableView 是否作为 NavigationControllers 的标准“从右滑入”?【参考方案2】:

我遇到了同样的问题 您应该首先添加一个新视图并使用控件和触控板连接导航控制器和新视图。然后选择Root View Controller 选项,这将创建一个新的根视图,然后您可以正常选择下一个屏幕。请相应地查看图像并跟随。

选择根视图控制器选项:

希望这会有所帮助。

【讨论】:

以上是关于在现有的 UINavigationController 中插入 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

在现有的 UINavigationController 中插入 UIViewController

在现有的 Visual Studio 2017 中下载 c++

是否可以使用 PhpSpreadSheet 在现有的电子表格中写入?

如何在现有的 bios 中实现新功能?

在现有的 ios/android 应用程序中嵌入反应原生应用程序

在现有的 webapp 中集成 BIRT