iPhone应用程序:整体应用程序层次结构&建筑

时间:2009-05-05 06:09:34

标签: iphone uiviewcontroller

我一直在用我的第一个真正的iPhone应用程序苦苦挣扎,并希望得到一些关于如何构建它的建议。我正在寻找一些最佳实践,包括创建UI组件并将它们链接在一起以创建应用程序流(以编程方式创建视图/控制器与使用Interface Builder等...)。

概述:
我需要在应用程序启动时显示“登录”视图 - 如果他们点击注册按钮,则显示“注册”视图。

登录后......我有一个TabBarController加载4个视图。这4个视图必须加载子视图(类似于master-detail)。

我的问题是:
1)将这种导航结构拼凑在一起的最佳方法是什么?使用相应的ViewController将每个视图创建为.xib?这些如何粘在一起?

2)我应该如何处理登录/注册导航,开始时不应显示TabBar,但在验证用户后需要它。

奖励点)是否有针对此类内容的文档最佳实践?我一直在黑客攻击一些可行的代码,但我很迷茫,并希望以正确的方式重新开始。

我知道这可能有点令人困惑,所有人都非常感激。

编辑:对于标签栏顶部的登录视图,我使用了这个,非常简单。

LoginViewController *loginViewController = [[LoginViewController alloc] init];
[loginViewController initWithNibName:@"Login" bundle:nil]; 
[self.tabBarController presentModalViewController:loginViewController animated:YES];

3 个答案:

答案 0 :(得分:1)

1)将此导航结构拼凑在一起的最佳方法是什么?使用相应的ViewController将每个视图创建为.xib?这些如何粘在一起?

使用UINavigationController并根据需要将自定义视图推送到导航堆栈。通过Xcode的 New Project 选项查看示例导航控制器应用程序,以了解其工作原理。

2)我应该如何处理登录/注册导航,开始时不应显示TabBar,但在验证用户后需要它。

设置登录视图(我会使用UITableView,其中一个部分包含两行用于用户名和密码,但这是我自己的偏好)。为注册字段设置第二个单独的视图(同样,我会使用UITableView来保持布局清洁和一致。

成功验证后,可能会使用视图动画弹出标签栏。

奖励点)是否有针对此类内容的文档最佳实践?我一直在黑客攻击一些可行的代码,但我很失落,并希望以正确的方式重新开始。

你最终会多次重写你的项目 - 这是一件好事。请查看Apple的示例应用程序(可从iPhone ADC站点获得),因为这些应用程序包含使用多个UIKit组件的几种“最佳实践”方法。至于组合更大的应用程序,尽可能简化您的设计并尽可能多地重用Apple的UI组件。您可以随时自定义。

答案 1 :(得分:1)

当你在XCode中创建一个新的基于标签栏的应用程序时,你几乎已经按照你想要的方式设置了 - 有一个主XIB可以从不同的XIB文件加载每个标签的视图。每个选项卡有一个XIB。请注意,在更改类型或添加选项卡时,您需要在带有选项卡栏的XIB和用于创建视图的XIB中指定正确的视图控制器类型!

对于登录视图,一种常见的方法是使用上面的标签栏,但在app delegate applicationDidFinishLaunching方法中提供了一个显示登录屏幕的模态视图控制器。模态控制器隐藏标签栏和其他所有内容,直到完成,然后它就可以被解除。

答案 2 :(得分:0)

在我看来,只有Cocoa编程示例和非常简单的应用程序适用于单个nib文件。否则,您应该将接口组件分布在多个nib上。这意味着每个笔尖都较小,当加载到内存中时,只会根据需要加载这些组件。这将提高应用程序的性能,并有助于在逻辑上组织您的程序,并在出现问题时更容易调试。

在我的tabbar应用程序中,我使用MainWindow.xib来包含主窗口和tabbar,但出于上述原因,我将每个选项卡分成单独的nib。

Apple提供以下指南:

创建nib文件时,请记住以下准则:

设计带有延迟加载的nib文件。计划加载只包含您需要的对象的nib文件。

在Mac OS X应用程序的主nib文件中,请考虑仅在nib文件中存储应用程序菜单栏和可选的应用程序委托对象。避免包括在应用程序启动之后才会使用的任何窗口或用户界面元素。相反,将这些资源放在单独的nib文件中,并在启动后根据需要加载它们。

将重复的用户界面组件(例如文档窗口)存储在单独的nib文件中。

对于仅偶尔使用的窗口或菜单,请将其存储在单独的nib文件中。通过将其存储在单独的nib文件中,只有在实际使用资源时才将资源加载到内存中。

有关详细信息,请访问:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4