gpt4 book ai didi

iphone - 添加 subview 后 superview 和parentviewcontroller nil

转载 作者:行者123 更新时间:2023-12-03 19:02:27 26 4
gpt4 key购买 nike

我认为我错过了一些基本的东西,所以我想向社区寻求一些帮助。我正在构建一个基于基本 iPhone 实用程序应用程序的应用程序。我的 MainView 和 FlipsideView 共享一些元素,因此我为这些部分创建了单独的 ViewController 和 nib 文件。为了做到这一点,我做了以下工作:1.创建一个名为searchDateViewController的 View Controller ,它是searchDateView.xib文件的所有者2. searchDateView.xib 基本上是一个带有 UILabel 的 UIView, View 连接正确3. 在 MainViewController.m 和 FlipsideViewController.m 中,我添加一个 subview ,如下所示:

- (void)loadView{
[super loadView];
searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
[[searchDateViewController view] setFrame:[searchDateView frame]];
[[self view] addSubview:[searchDateViewController view]];

...
}

一切都显示并工作正常。基本上,根据主视图和反面 View 中发生的操作, Nib 的 UILabel 会发生变化。但是,如果 searchDateViewController 是从 MainView 或 FlipsideView 加载的,我想做一些稍微不同的事情。但是,我似乎无法弄清楚哪个 ViewController 正在添加 searchDateViewController subview 。

在 searchDateViewController 中我尝试过:

- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"superview %@", self.view.superview);
NSLog(@"parentviewcontroller %@", self.parentViewController);
}

在这两种情况下我都为零。

所以我的问题是 - 我能找出哪个 ViewController 正在添加 searchDateViewController subview 吗?如果是这样怎么办?或者如果我这里的逻辑完全困惑,我应该怎么做?

谢谢!

最佳答案

viewDidLoad 在 View Controller 加载其 View 时被调用。就您而言,这发生在这一行:

[[searchDateViewController view] setFrame:[searchDateView frame]];

此时,您还没有调用 addSubview:,因此 View 的 super View 为零也就不足为奇了。

要解决您的问题,您应该在 SearchDateViewController 中定义一个属性来区分不同的情况。然后,创建 SearchDateViewController 实例的父 Controller 将相应地设置此属性。

一般来说,我不认为使用 UIViewController 子类作为 View 的 Controller ,该 View 用作一个或多个全屏 View 的 subview ,而不是用作全屏 View 本身。 UIViewController 的大部分逻辑都假设它用于管理全屏 View 。例如,根据您的设计,我认为当设备方向发生变化等时,SearchDateViewController 可能会修改 View 的框架。由于非全屏 subview 不需要所有这些功能,我建议您直接从 NSObject 子类化您的 SearchDateViewController .

关于iphone - 添加 subview 后 superview 和parentviewcontroller nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064513/

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