2012-03-29 135 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