2011-05-16 74 views
2

我想听听开发人员对在iPhone上交换视图的最佳方式的意见。视图交换技术

例如,我有一个标签栏,其中一个标签默认为登录视图。当用户登录视图时更改为登录视图。

我打算只使用一个视图控制器,并将所有内容隐藏在一个xib中并根据需要显示内容,但这看起来绝不优雅。

其次,我正在考虑有一个viewcontroller,只是交换xib。我不愿意尝试这个,因为我在一篇文章或2中读过它会导致内存泄漏。

最后,我正在考虑使用2个视图控制器与2个独立的xibs。我的直觉告诉我这可能是“正确”的解决方案,但我迄今未能以正确的方式追踪任何示例代码。

您能提供解决此问题最佳方法的建议吗? 有没有我没有列出的技术? 谢谢。

回答

2

我会保持在视图控制器中显示哪个视图的逻辑。 XIB是视图本身,它不应该是暂时的或者对于特定视图不可见的对象。

你的第二种方法(交换视图)对我来说似乎是正确的方法,并且总是我在这些情况下亲自做的。如果你做对了,我不知道有任何内存问题(从超级视图中移除,然后将新视图作为控制器视图的子视图加载)。您可以在新的XIB加载完成之后并在向用户显示之前执行任何自定义初始化。

多个视图控制器看起来是多余的,因为那时理想情况下您需要另一个顶级控制器管理这两个视图控制器。

+1

谢谢你的意见。我见过的加载xib的唯一例子如下所示。 loginViewController = [[oginViewController alloc] initWithNibName:@“LoginView”bundle:[NSBundle mainBundle]];我将如何加载第二个xib,一旦自己创建的实体控制器(从控制器内)( – dubbeat 2011-05-16 10:24:16

+0

)当您还初始化视图控制器时,您不需要显式初始化NIB。您可以为视图控制器执行init,一旦将其加载到内存中,您可以在应用程序的模型中运行某些检查以显示哪个视图(登录或登录)。然后,您可以使用 - (NSArray *)loadNibNamed:(NSString *)名称所有者:(id)所有者选项:(NSDictionary *)选项构造加载视图。 – 2011-05-16 10:31:26

+0

只需确保将NIB中的文件所有者设置为正确的视图控制器,否则您的包可能无法正确加载,或者对视图控制器中的IBOutlets可见。希望有所帮助! – 2011-05-16 10:32:33