Iphone 视图交换技术

Iphone 视图交换技术,iphone,cocoa-touch,uiview,uiviewcontroller,Iphone,Cocoa Touch,Uiview,Uiviewcontroller,我想听听开发者对在iphone上交换意见的最佳方式的意见 例如,我有一个选项卡栏,其中一个选项卡默认为登录视图。当用户登录视图时,视图将更改为登录视图 我打算只使用一个视图控制器,将所有内容放在一个xib中,根据需要隐藏和显示内容,但这看起来一点也不优雅 其次,我考虑使用一个viewcontroller,并简单地交换xib。我有点不愿意尝试这种方法,因为我在一篇或两篇文章中读到它可能导致内存泄漏 最后,我考虑使用2个视图控制器和2个独立的XIB。我的直觉告诉我,这可能是一个“合适的”解决方案,但

我想听听开发者对在iphone上交换意见的最佳方式的意见

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

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

其次,我考虑使用一个viewcontroller,并简单地交换xib。我有点不愿意尝试这种方法,因为我在一篇或两篇文章中读到它可能导致内存泄漏

最后,我考虑使用2个视图控制器和2个独立的XIB。我的直觉告诉我,这可能是一个“合适的”解决方案,但到目前为止,我还没有找到正确的方法来查找任何示例代码

你能就解决这个问题的最佳方法提供建议吗? 有没有我没有列出的技巧?
谢谢。

我会保留在视图控制器中显示哪个视图的逻辑。XIB是视图本身,其中不应包含任何对象,这些对象对于特定视图来说是暂时的或不总是可见的

你的第二种方法(交换观点)对我来说似乎是正确的方法,我个人在这种情况下总是这样做的。如果操作正确(从superview中删除,然后将新视图作为控制器视图的子视图加载),我不会发现任何内存问题。加载新的XIB后,在向用户显示之前,可以执行任何自定义初始化


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

谢谢您的输入。我所见过的加载xib的唯一示例如下所示。loginViewController=[[oginViewController alloc]initWithNibName:@“LoginView”捆绑包:[NSBundle mainBundle]];一旦创建了实际的控制器(从控制器内部创建),我将如何加载第二个xib您不需要在初始化视图控制器时显式初始化NIB。您可以只对视图控制器进行初始化,一旦它加载到内存中,您就可以在应用程序模型中运行某些检查,以确定要显示哪个视图(登录或登录)。然后,您可以使用-(NSArray*)loadNibNamed:(NSString*)name owner:(id)owner options:(NSDictionary*)options构造加载视图。只需确保将NIB中的文件所有者设置为正确的视图控制器,否则您的包可能无法正确加载,或者视图控制器中的IBoutlet可以看到。希望有帮助!在“登录视图”nib中,我必须将文件所有者类设置为“UIViewController”,而不是从中加载它的控制器。然后我将nibs视图设置为自定义视图。这里为可能在这里着陆的人描述的过程@索拉布。这对我很有用。这与你的意思一致吗?是的,这就是我的意思,尽管我不知道为什么你必须将文件的所有者设置为UIViewController。