繁体   English   中英

superview和parentviewcontroller在添加子视图后为零

[英]superview and parentviewcontroller nil after adding a subview

我想我缺少一些基本的东西,所以我想向社区寻求帮助。 我正在构建一个基于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]];

...
}

一切都显示和工作得很好。 基本上取决于每个主视图和翻转视图中发生的动作,笔尖的UILabel被更改。 但是,如果从MainView或FlipsideView加载searchDateViewController,我想做一些稍微不同的事情。 但是,我似乎无法弄清楚哪个ViewController正在添加searchDateViewController子视图。

在searchDateViewController中,我试过:

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

在这两种情况下,我都没有。

所以我的问题是 - 我能找出哪个ViewController正在添加searchDateViewController一个子视图? 如果是这样的话? 或者,如果我的逻辑完全搞砸了,我该怎么做呢?

谢谢!

视图控制器加载其视图时调用viewDidLoad 在你的情况下,发生在这一行:

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

那时,你还没有调用addSubview:所以难怪视图的superview是零。

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

通常,我认为使用UIViewController子类作为视图的控制器不是一个好主意,该视图用作一个或多个全屏视图的子视图,而不是用作全屏视图本身。 UIViewController的大部分逻辑都假设它用于管理全屏视图。 例如,根据您的设计,我认为当设备方向改变等时,SearchDateViewController可能会修改视图的框架。由于您不需要非全屏子视图的所有这些功能,我建议您直接从NSObject继承您的SearchDateViewController 。

ViewController和视图是完全独立的。

在大多数情况下,当您将子视图添加到父视图时,不会将其控制器添加到父视图中。 此规则的例外是导航控制器,它添加控制器而不是视图以维护视图控制器的层次结构。

您的SearchDate viewController找不到父控制器,因为您从未分配过父控制器,系统不会自动执行。 当您从另一个控制器唤起视图时,您可以只分配一个父控制器。

searchDateViewController.parentController=self;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM