gpt4 book ai didi

objective-c - 这是添加/删除 View 的正确方法吗?

转载 作者:行者123 更新时间:2023-11-28 23:07:04 25 4
gpt4 key购买 nike

假设我有 4 个 View Controller (称它们为 FirstView、SecondView、ThirdView、FourthView),它们是以编程方式创建的,并且都在单独的文件中:

在 AppDelegate.m didFinishLaunchingWithOptions 方法中,我有这些代码行

self.rootViewController = [[rootViewController alloc]initWithNibName:@"rootViewController" bundle:nil];
self.window.rootViewController = self.rootViewController;

在 rootViewController.m 加载 View 方法中我有

self.view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];
self.firstView = [[FirstView alloc]init];
[self.view addSubview:self.firstView.view];

该代码工作正常 - 显示第一个 View 。

我们继续

在FirstView.m中的switchViews方法

注意:请看代码中的注释

 self.secondView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];


// I think here secondView is added to rootViewController - right ?
[self.view.superview addSubview:self.secondView.view];

// Here first view is removed from rootViewController - right ?
[self.view removeFromSuperview];

这是我添加/删除 View 的方式。

这种方法是否正确?你能推荐一个更好的解决方案吗?

我读过有关 UINavigationController 的内容,但我认为这不是这种情况下的解决方案。

最佳答案

你说:

I have 4 views (call them FirstView ...

然后你说:

[self.view addSubview:self.firstView.view]; 

这让我觉得 FirstView 实际上不是 UIView - 正如您所说的那样。相反,它可能是一个 UIViewController - 一个完全不同的野兽。

如果我的怀疑是正确的 - 那么可以这么说,你“偏离了轨道”。

超越那个到你的示例代码片段:

self.secondView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];

// I think here secondView is added to rootViewController - right ?
[self.view.superview addSubview:self.secondView.view];

// Here first view is removed from rootViewController - right ?
[self.view removeFromSuperview];

这绝对不是一个好主意。原因如下:

首先:您的 View Controller 并没有明确地“知道”关于您随意插入和删除 subview 的父 View 的任何信息 - 所以它不应该那样做。或者,您可以创建自己的 View 并从中插入/删除 subview ——这不仅是完全可以接受的,而且也是常见的做法。

第二:如果这些实际上是 UIViewController,就像我认为的那样 - 那么您没有正确处理将它们连接到 UIViewController事件链 - 这意味着这些子类上的方法,如 viewDidAppear:viewDidUnload 将不会触发。

关于objective-c - 这是添加/删除 View 的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com