2011-01-26 94 views
0

在我的應用程序中,我試圖刪除所有現有子視圖並添加一個在Interface Builder中創建的新子視圖。但是,我似乎無法連接視圖。連接問題IBOutlet

當點擊一個按鈕,下面的功能(的UIViewController的一個子類中)執行:

// Display a list of settings to choose from 
- (void) settings 
{ 
    SettingsRootController *settingsController = [[SettingsRootController alloc] initWithNibName:@"SettingsRootController" bundle:nil]; 
    _settingsController = settingsController; 

    for (UIView *view in self.view.subviews) 
    { 
     [view removeFromSuperview]; 
    } 

    [self.view addSubview:_settingsController.view2]; 

    int a = [self.view.subviews count];  
    [self.view setNeedsDisplay]; 

    ...... 
} 


#import <UIKit/UIKit.h> 

@interface SettingsRootController : UIViewController 
{ 
    IBOutlet UIView *_view2; 
} 

@property(nonatomic, retain) IBOutlet UIView *view2; 

進入Interface Builder中,我創建了一個新的基於視圖的廈門國際銀行。將文件所有者設置爲SettingsRootController。隨機將UITextView拖放到xib中。連接UITextView以在SettingsRootController中查看和查看2。

然而,如果上面的行是:

[self.view addSubview:_settingsController.view2]; 

一個將總是0,因此,新的屏幕是空的。

但是,如果改變:

[self.view addSubview:_settingsController.view]; 

我能看到的UITextView。

回答

0

當您創建視圖控制器時,其視圖將不會在初始化時創建。該視圖將在第一次訪問視圖屬性時創建。這就是爲什麼當你使用_settingsController.view時它會工作。但是當你訪問view2時,視圖將不會被加載。你可以寫一個自定義的getter方法,如:

-(UIView*) view2 { 
    _view2 = self.view; 
    return _view2; 
} 
0

實例var聲明與屬性聲明不同!有和沒有下劃線。也許這就是爲什麼它不起作用。

+0

你是什麼意思?你的意思是_view2和view2?我把@synthesize view2 = _view2; – SmallChess 2011-01-26 10:48:09

+0

接縫確定,我會寫一個新的答案 – Felix 2011-01-26 10:54:55