在我的应用程序中,我试图删除所有现有的子视图,并添加在Interface Builder中创建的新视图。但是,我似乎无法连接视图。
当按钮单击时,执行以下函数(在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中,我创建了一个新的基于视图的xib。将文件所有者设置为SettingsRootController。随机将UITextView拖入xib。连接UITextView以在SettingsRootController中查看和查看。
但是,如果以上行是:
[self.view addSubview:_settingsController.view2];
a始终为0,因此新屏幕为空。
但如果改为:
[self.view addSubview:_settingsController.view];
我可以看到UITextView。
答案 0 :(得分:0)
实例var声明与属性声明不同!有和没有下划线。也许这就是为什么它不起作用。
答案 1 :(得分:0)
创建视图控制器时,不会在初始化时创建其视图。视图将在第一次访问view属性时创建。这就是为什么当你使用_settingsController.view
时它的工作原理。但是当您访问view2时,将不会加载视图。您可以编写一个自定义的getter方法,如:
-(UIView*) view2 {
_view2 = self.view;
return _view2;
}