2009-05-05 121 views
2

我一直在努力与我的第一个真正的iPhone应用程序一点点,并希望得到一些建议,应如何结构。我正在寻找一些创建UI组件并将它们链接在一起以创建应用程序流的最佳实践(以编程方式创建视图/控制器与Interface Builder等)。iPhone应用程序:总体应用程序层次和体系结构

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

登录后...我有一个TabBarController装载4次。这4个视图将不得不加载子视图(master-detail)。

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

2)我应该如何处理登录/注册导航,没有的TabBar应该开始被显示,但认证用户之后会需要它。

Bonus Point)有没有记录这种东西的最佳实践?我一直在攻击一些可行的代码,但我迷失了方向,并希望以正确的方式重新开始。

我知道这可能是一个有点混乱,所有和任何帮助深表感谢。

编辑:关于我用这个标签栏,很简单,顶部的登录视图。

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

回答

1

当您在XCode中创建基于标签栏的新应用程序时,您已经按照自己喜欢的方式进行了设置 - 主XIB为来自单独的XIB文件的每个标签加载视图。每个选项卡都有一个XIB。请注意,当您更改类型或添加选项卡时,您需要在带有选项卡栏的XIB以及用于创建视图的XIB中指定正确的视图控制器类型!

至于登录视图,常用的方法是使用上面的标签栏,但在应用程序委托中,applicationDidFinishLaunching方法提供了一个显示登录屏幕的模式视图控制器。模态控制器隐藏标签栏和其他所有内容,直到完成,然后可以将其解除。

+0

您可以详细介绍一下presentModalViewController调用吗?它看起来像我必须在导航控制器上调用它,我只有一个tabbarcontroller。 – JWD 2009-05-06 23:48:55

0

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

在我的TabBar应用我使用的MainWindow.xib包含主窗口和TabBar,但我每个标签分手到上述原因,一个单独的笔尖。

苹果提供了以下指导原则:

在创建笔尖文件,尽量保持以下准则:

在考虑延迟加载设计你的笔尖文件。规划加载只包含您需要的对象的nib文件。

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

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

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

欲了解更多信息,您可以访问:

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

1

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

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

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

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

也许使用视图动画来成功验证后弹出标签栏。

Bonus Point)有没有记录这种东西的最佳实践?我一直在攻击一些可行的代码,但我迷失了方向,并希望以正确的方式重新开始。

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