2012-03-29 88 views
5
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)]; 
    [view addSubview:headViewController.vew]; 
    [self.view addSubview:view]; 
} 

HeadViewController.h:的UIView addSubview和子视图不显示

@interface HeadViewController : UIViewController 
{ 
    IBOutlet UIView *view; 
} 
@property (nonatomic, retain)IBOutlet UIView *view; 
@end 

和我连接视图文件的所有者。我不能看到headViewController.view

回答

15

首先,您不需要在HeadViewController类中定义view插座。它会自动从UIViewController超类中继承。

然后,我建议您直接将HeadViewController的视图添加到您当前的视图中。例如。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

但是,如果你正在使用ARC(自动引用计数),该headViewController实例将可能是viewDidLoad方法结束后释放。这很方便(我会说这是强制性的)将该实例分配给当前显示的控制器中的局部变量。这样,如果需要,您将能够在以后处理其视图的组件,实例将保留,并且其他所有内容都将完美工作。在.m类实现文件的开头中隐藏的接口定义

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

@interface MyController() 
    @property (nonatomic, strong) HeadViewController *headViewController; 
@end 

:你应该有这样的事情。

+0

我纠正你:headViewController.view是零,如果它不作为子视图添加。需要交换addsubview并设置框架 – NeverBe 2012-03-29 06:39:36

+0

检查我关于ARC的更新。如果'headViewController.view'为'nil',请仔细检查视图与nib文件中控制器的连接。在这个方法(出口问题)内还是在完成后(ARC问题),它是否为“零”? – marzapower 2012-03-29 06:43:38

+0

我改变了代码,就像你告诉我的一样,我定义了一个视图,因为我删除了默认的代码。而且还没有headViewController.view ...我很困惑。 – jxdwinter 2012-03-29 06:44:55

0

它看起来像一个错字 - 忘记在.view第i

[视图addSubview:headViewController.vew];

+1

这可能是正确的,但它看起来像op很早以前就已经解决了这个问题...... – greedybuddha 2013-05-21 21:26:18

0

i被丢失在语法

[视图addSubview:headViewController.view];

+0

答案是在2年前提供的。现在的目的是什么? – YoungHobbit 2016-01-08 03:24:45

+0

我刚看到这一个 – Bharath 2016-01-08 10:52:12