0

大家好

我是一个新手 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 导航页面,这让我感到困惑。

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

4

2 回答 2

3

你必须做一些学习。否则,您稍后将花费更多时间来解决所有问题……但是,这里有一些提示。

使用嵌套的 ViewController 会导致各种麻烦,所以如果您时间不够,请跳过它。

将每个“页面”视为一个 ViewController。ViewController 有一个名为 View 的属性,但它实际上只是整个视图层次结构的顶层视图。视图是任何视觉对象的基类,如标签、按钮等。所有视图都可以有子视图,因此您可以在标签等下添加图像,并且如果您愿意,可以做一些非常奇怪的事情。我这样说只是为了让您解放思想,了解如何使用视图。

现在,ViewController 应该将代码保存到一个视图层次结构中。该视图层次结构仅适用于该视图控制器。

当用户想要导航到另一个页面时,您有几种选择:

NavigationViewController - 当用户想要深入研究数据时应该使用它,例如打开列表中项目的详细视图等。NavigationViewController 为您提供后退按钮、正确动画等方面的帮助。您“弹出”一个视图控制器去退一级。如果用户单击后退按钮,这是自动的。

TabBarViewController - 如果你想在屏幕底部有一个标签栏,请使用它。每个选项卡都连接到一个 ViewController,它有自己的视图层次结构。

PushModal - 如果您在 ViewController 中并且只需要从用户那里获取一些数据,这不是应用程序正常导航的一部分,您可以以模态方式推送新的 ViewController。这是您与内置于 ViewControllers 的 iOS 交互的方式。这也是从视图控制器获取值的好方法。

你有它。去了解更多。:)

于 2012-08-23T21:59:07.980 回答
0

听起来,对于您正在使用的东西,您应该使用导航控制器。这将自动处理将视图推送到堆栈上,然后再将它们弹出。这还将在导航栏中自动创建一个后退按钮(可自定义)。

如果您使用的是 iOS 5 或 6,我强烈建议您在 Interface Builder 中尝试“故事板”。故事板允许您以图形方式表示不同视图之间的转换(称为“segues”)。

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

于 2012-08-23T22:00:34.250 回答