我正在尝试创建一个具有一个导航视图控制器和多个条形按钮的IOS应用程序,其中每个按钮都会更改视图本身的内容。我的大部分观点都是自定义视图,所以无论如何我都不会在故事板中看到任何明确的预览。
我正在考虑创建一个导航视图控制器,以及几个NIB文件来表示每个视图。每个NIB都有自己的类,包含所有IBOutlets和IBActions。
然后,当在导航视图控制器中单击按钮时,只需通过清除旧视图(removeFromSuperview
)切换到新视图,然后调用loadNibNamed
以加载新视图。
这听起来合理还是所有这些反序列化在CPU方面都很昂贵?在故事板中创建不同的视图控制器,使用segue等,并将这些导航栏按钮复制到每个视图控制器会不会更好?
答案 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];
希望这有帮助。