在ios编程中切换UIViews的正确方法

时间:2012-08-23 21:45:37

标签: iphone objective-c ios

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页面,这让我很困惑。

我为我糟糕的英语道歉,但我累了,英语不是我的第一语言。

2 个答案:

答案 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”)。

除了更容易设计和实现之外,另一个优点是,如果将来您想要更改应用程序的设计,则不必遍历所有代码并手动更新每个视图连接。