以编程方式创建自定义View Controller导航界面(swift 3.1)

在构建应用程序时,必须考虑将内容显示给用户的方式。 将功能和逻辑分离到不同的视图控制器中,可以使用户和您的代码库保持整洁。 尽管Apple提供了使用UINavigationController或UITabBarController导航到这些视图控制器的方法,但有时它们不太适合您的应用程序需求。

在本文中,我将构建一个简单的应用程序,演示如何创建导航界面。 它将涉及创建一个主视图控制器,该主视图控制器将负责根据用户操作来呈现和关闭其他视图控制器视图。

设置项目

让我们从创建一个单一视图应用程序开始。 创建项目后,我将删除main.storyboard文件,并从部署信息下的项目主界面中删除main。

接下来,将默认的ViewController重命名为MasterViewController。

最后,在AppDelegate中并设置我们的窗口以使用MasterViewConroller作为根视图控制器。 我将masterVC背景色设置为红色,以便我们知道一切正常。

此时运行该应用程序将使您出现一个红色屏幕。

设置MasterViewController

这里的概念是让MasterViewController显示其他视图控制器的视图。 为了做到这一点, MasterViewController需要做两件事-一种过渡到要显示的视图控制器的方法,以及一个指定为包含该视图控制器主视图的视图。

对于我们的示例,我们将UISegmentedControl放置在页面顶部,并在MasterViewController的视图中添加一个容器视图以显示其他视图控制器视图。

这是用于设置navSegmentedControlcontentView的代码

接下来,我们可以为要显示的视图控制器创建一些新的swift文件。 这些将是MasterViewController的子视图控制器,我们将在viewDidLoad中更改其颜色,以便我们知道何时切换到它们。

现在,我们有了主视图控制器和要显示的视图控制器。 接下来,我们将向MasterViewController添加逻辑,这将使我们能够根据我们选择的段过渡到子视图控制器。

添加子视图控制器

我们需要做的第一件事是告诉我们的MasterViewController哪个视图控制器将是它的子级。 您决定如何存储子视图控制器取决于您-在本示例中,我将创建两个惰性变量,如果将它们导航到,它们会将自身添加为子变量。

首先让我们创建一个将子视图控制器添加到MasterViewController的函数。

在此函数中,我们使用apples API将视图控制器作为子级添加到自身( MasterViewController )中,并使用containerView显示视图控制器视图。 使用addChildToViewControllerdidMoveToParentViewController很重要,因为它可以正确地在要添加的子视图控制器的生命周期中移动。 如果我们只是简单地将childVC.view作为子视图添加到与UIViewController生命周期相关的self.view函数,则将不会调用该函数(例如viewDidAppear )。

现在,我们可以使用在惰性变量中创建的此函数。

通过使这些变量变得惰性,可以避免在用户不过渡到子视图控制器时创建子视图控制器的情况。

向分段控件添加功能

现在,我们可以将一个目标添加到navSegmentControl ,该目标告诉我们选择是否更改-如果更改,则在containerView中显示正确的视图控制器。

让我们先创建一个函数,该函数包含在分段控制器的选择更改时发生的逻辑。

一旦选择了要移动到的视图控制器,就会在此处进行转换。 在此示例中,我只是基于所选索引隐藏或显示视图控制器。 如果要创建自定义动画来呈现视图,则应在此处调用它。

记住,我们不需要在这里调用addAsChildVC函数,因为在创建惰性变量时会调用该函数。

现在,我们可以将此功能添加为setupViews函数中的目标。

最后,我们可以取消隐藏确实加载了视图的blueVC,以便当appRun运行时,我们看到的是蓝色选择,而不是白色的屏幕。

差不多了! 现在,当我们运行该应用程序时,我们可以通过在分段控件中进行选择来在视图控制器之间进行转换。

如果要从MasterViewController中删除一个视图控制器作为子视图控制器,则可以实现以下功能。

您可以在此处查看完整的项目。

希望你喜欢这个帖子!