IOS:一个具有许多不同视图的导航视图控制器 - 我该怎么做?

时间:2016-08-27 14:26:24

标签: ios xib

我正在尝试创建一个具有一个导航视图控制器和多个条形按钮的IOS应用程序,其中每个按钮都会更改视图本身的内容。我的大部分观点都是自定义视图,所以无论如何我都不会在故事板中看到任何明确的预览。

我正在考虑创建一个导航视图控制器,以及几个NIB文件来表示每个视图。每个NIB都有自己的类,包含所有IBOutlets和IBActions。

然后,当在导航视图控制器中单击按钮时,只需通过清除旧视图(removeFromSuperview)切换到新视图,然后调用loadNibNamed以加载新视图。

这听起来合理还是所有这些反序列化在CPU方面都很昂贵?在故事板中创建不同的视图控制器,使用segue等,并将这些导航栏按钮复制到每个视图控制器会不会更好?

3 个答案:

答案 0 :(得分:0)

最简单的解决方案:

ViewController->
  View->
    rootViewOne
    rootViewTwo
    rootViewThree
    ...

根据条形按钮的操作,将特定的rootView隐藏属性设置为true或false:

self.rootViewOne.hidden = currentIndex == 0
self.rootViewTwo.hidden = currentIndex == 1
self.rootViewThree.hidden = currentIndex == 2

答案 1 :(得分:0)

更新 - Sandmoose Software的嵌入式交换:

http://sandmoose.com/post/35714028270/storyboards-with-custom-container-view-controllers

这是"它是如何工作的片段"部分:

  

ViewController和ContainerViewController之间的segue是一个   嵌入segue。 ContainerViewController和它们之间的segue   子视图控制器是一个自定义segue。此自定义segue已命名   Empty并且是UIStoryboardSegue的子类。它包含一个空的   执行方法。 ContainerViewController将负责移动   子视图控制器进出不到位。但是,假的   需要segue才能在故事板中创建连接。

     

如果你像我一样,你会想到假装/假装   像这样的阶级,但好处是它可以让我们坚定地坚持下去   故事板成语的世界,而不是以编程方式求助   加载孤立的故事板场景。这是一点点的丑陋   这使我们能够保持其实用性和优雅性   故事板。故事板仍然在视觉上代表场景和   他们的关系准确。我们仍然可以使用segues来控制   会发生什么。

----------下面的老答案(phfffft!)------

这里提出了几个不同的问题:一个是关于导航控制器导航栏中的自定义按钮,另一个是关于为导航控制器分配多个视图,另一个是关于将视图放在单独的XIB文件中,同时保持IBOutlet连接等等。

第一个需要一个标签栏控制器,你可以自定义它以你认为合适的方式查看,就像导航栏一样(ADC有现成的示例代码," UIKit目录(iOS) ):创建和自定义符合您需求的UIKit控件"。

第二种方法可以通过遵循YouTube,Apple和互联网上其他地方免费提供的任意数量的说明在Interface Builder中轻松完成;你会发现它是一个非常直观的过程。如果可以将标签栏控制器拖动连接到视图控制器,则可以直接使用其余控制器。否则,Apple有一个示例代码,用于在单个视图控制器界面中自定义视图之间的导航或转换。 "状态恢复儿童视图控制器"为您提供所需的最佳结构(只需提取与恢复相关的代码,然后使用其余代码)。

第三种根本不直观;并且,据我所知,只有几组指令可用于从父级或顶级视图控制器中分离视图(或其他视图控制器及其视图)。这是我尚未尝试过的一个,所以我很想知道它对你的影响:

http://digginginswift.com/2015/08/30/making-reusable-views-in-separate-xibs

我使用的技术涉及创建一个故事板,其中包含一个视图控制器,然后是一个新的视图控制器,嵌入在每个预期视图的容器视图中;然后,删除每个子视图控制器中的视图,这将留下您在单独的XIB中设置的视图的位置。通过将文件所有者设置为父视图控制器来连接它们。如果您想尝试与上述网站提供的方法不同的方法,我可以向您发送示例代码。

答案 2 :(得分:0)

您可以将其他视图控制器添加为子视图控制器。 通过这种方式,您将在各自的视图控制器中拥有不同视图的代码,并且您的主/父视图控制器不会很混乱。

<强> To add child view controller:

// Get instance of your view controller
UIViewController *childViewController = [UIViewController new];

// Add your view controller as a child view controller
[self addChildViewController:self.loginView];

// Set frame for your childViewController's view
[childViewController.view setFrame:CGRectMake(0.0f, 0.0f, self.view.frame.size.width, self.view.frame.size.height)];

// Add childViewController's view as a subview to your viewcontroller's view
[self.view addSubview:childViewController.view];

// Notify your main/parent controller that a child view controller is being added
[childViewController didMoveToParentViewController:self];

<强> To remove child view controller:

// Notify the childViewController that it will be removed
[childViewController willMoveToParentViewController:nil];

// Remove childViewController's view
[childViewController.view removeFromSuperview];

// Remove childViewController from your main/parent view controller
[childViewController removeFromParentViewController];

希望这有帮助。