2011-01-26 74 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