dea*_*oxy 5 iphone cocoa-touch parentviewcontroller superview
我想我缺少一些基本的东西,所以我想向社区寻求帮助.我正在构建一个基于iPhone实用程序基本应用程序的应用程序.我的MainView和FlipsideView共享一些元素,所以我为这些片段创建了单独的ViewControllers和nib文件.为了做到这一点,我做了以下工作:1.创建了一个名为searchDateViewController的viewcontroller,它是searchDateView.xib的文件所有者2. searchDateView.xib基本上是一个内部有UILabel的UIView,视图连接正确3.里面MainViewController.m和FlipsideViewController.m我将子视图添加为folllows:
- (void)loadView{
[super loadView];
searchDateViewController = [[SearchDateViewController alloc] initWithNibName:@"SearchDateView" bundle:nil];
[[searchDateViewController view] setFrame:[searchDateView frame]];
[[self view] addSubview:[searchDateViewController view]];
...
}
Run Code Online (Sandbox Code Playgroud)
一切都显示和工作得很好.基本上取决于每个主视图和翻转视图中发生的动作,笔尖的UILabel被更改.但是,如果从MainView或FlipsideView加载searchDateViewController,我想做一些稍微不同的事情.但是,我似乎无法弄清楚哪个ViewController正在添加searchDateViewController子视图.
在searchDateViewController中,我试过:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"superview %@", self.view.superview);
NSLog(@"parentviewcontroller %@", self.parentViewController);
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都没有.
所以我的问题是 - 我能找出哪个ViewController正在添加searchDateViewController一个子视图?如果是这样的话?或者,如果我的逻辑完全搞砸了,我该怎么做呢?
谢谢!
viewDidLoad当视图控制器加载其视图时调用。就您而言,这发生在这一行:
[[searchDateViewController view] setFrame:[searchDateView frame]];
Run Code Online (Sandbox Code Playgroud)
此时,您还没有调用addSubview:,因此视图的超级视图为零也就不足为奇了。
为了解决您的问题,您应该在 SearchDateViewController 中定义一个属性来区分不同的情况。然后,创建 SearchDateViewController 实例的父控制器将相应地设置此属性。
一般来说,我认为使用 UIViewController 子类作为视图的控制器不是一个好主意,该视图用作一个或多个全屏视图的子视图,而不是用作全屏视图本身。UIViewController 的大部分逻辑都假设它用于管理全屏视图。例如,根据您的设计,我认为当设备方向发生变化等时,SearchDateViewController 可能会修改视图的框架。由于非全屏子视图不需要所有这些功能,我建议您直接从 NSObject 子类化您的 SearchDateViewController 。
| 归档时间: |
|
| 查看次数: |
6899 次 |
| 最近记录: |