Hy大家
我是一个新手ios程序员,当我必须切换我的应用程序的页面时,我面临很多疑问。
使用术语“页面”我的意思是一个UIView用一些小部件(按钮,文本框,表格......)填满整个屏幕。
据我所知,我应该使用UIViewController来管理这些页面 因为每个页面都应该是一个屏幕的内容。
我的应用程序以带有许多按钮的ViewScroller开始,当用户单击其中一个按钮时,它会打开一个新页面。
第一页是连接到Window的RootController的UIView。
到目前为止,为了打开新页面,我将一个子控制器添加到RootController,它作为RootController视图的子视图:
RicLocaliController = [[RicercaLocaliViewController alloc] initWithNibName:@"RicercaLocaliViewController" bundle:nil];
[self addChildViewController:RicLocaliController];
[RicLocaliController didMoveToParentViewController:self];
[self.view addSubview:RicLocaliController.view];
RicLocaliController.view.frame = self.view.bounds;
当用户点击“后退”按钮时,我删除子控制器和子视图。
走下这条路,我会得到一个动态的控制器树和他们的视图。
到目前为止,我没有遇到任何问题,我的应用程序可以升到树中的第三级并返回。方向更改时,每个页面的行为都正确。
但我担心为每个子页面添加子控制器和子视图可能不是正确的做法。
我担心,如果我在方向更改时嵌套了很多页面,那么应用程序可能会缓慢响应,因为超级视图也可以用来管理此事件。
所以我想知道的是,如果我应该使用导航控制器或其他方式来管理我的页面更改,那么我所做的事情是完全没有意义的。
不幸的是,我的老板没有给我足够的时间来研究这个主题,所以我想建议遵循最佳解决方案,可能使用框架提供的最标准和最简单的组件而不是最新的功能。
我读了很多关于这个主题的网页,但在我看来,有很多方法可以管理导航beetwen页面,这让我很困惑。
我为我糟糕的英语道歉,但我累了,英语不是我的第一语言。
答案 0 :(得分:3)
你必须做一些学习。你会花更多的时间来解决所有问题,否则......但是,这里有一些提示。
使用嵌套的ViewControllers会导致各种麻烦,所以如果你的时间不够,请跳过它。
将每个“Page”视为一个ViewController。 ViewController有一个名为View的属性,但它实际上只是整个视图层次结构的顶视图。视图是任何可视对象的基类,如标签,按钮等。所有视图都可以有子视图,因此您可以在标签等下添加图像,如果您愿意,可以执行非常奇怪的操作。我只是这样说是为了解释你如何使用观点。
现在,ViewControllers应该保持代码到一个视图层次结构。该视图层次结构仅适用于该View Controller。
当用户想要导航到另一个页面时,您有几个选择:
NavigationViewController - 应该在用户想要深入研究数据时使用,例如打开列表中项目的详细视图等.NavigationViewController为您提供后退按钮,正确动画等方面的帮助。您“弹出”一个viewcontroller返回一个级别。如果用户单击后退按钮,则这是自动的。
TabBarViewController - 如果您想要屏幕底部的标签栏,请使用它。每个选项卡都连接到一个ViewController,它有自己的视图层次结构。
PushModal - 如果您在ViewController中并且只需要从用户那里获取一些数据,这不是应用程序的正常导航的一部分,您可以以模态方式推送新的ViewController。这是您与ViewControllers中内置的iOS进行交互的方式。这也是从视图控制器获取值的好方法。
你有它。去了解更多。 :)
答案 1 :(得分:0)
听起来,对于您正在使用的内容,您应该使用导航控制器。这将自动处理将视图推入堆栈,然后再将其弹出。这也将自动在导航栏中创建一个后退按钮(可自定义)。
如果您使用的是iOS 5或6,我强烈建议您在Interface Builder中尝试“故事板”。故事板允许您以图形方式表示不同视图之间的过渡(称为“segues”)。
除了更容易设计和实现之外,另一个优点是,如果将来您想要更改应用程序的设计,则不必遍历所有代码并手动更新每个视图连接。