我想知道如何以编程方式将UI元素添加到现有的nib文件中。
如果我在loadView
方法中以编程方式创建视图,并添加如下代码,则标签会正确显示。
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,2,150,100)];
[self.view addView:lbl];
但是如何将标签添加到现有的nib文件中?
答案 0 :(得分:2)
正如Paul.s所指出的,您需要在viewDidLoad
方法中执行自定义代码。
来自Apple文档。
在视图控制器加载它之后调用此方法 相关视图到内存中。无论如何调用此方法 视图是存储在nib文件中还是已创建 以编程方式在loadView方法中。这种方法最常见 用于对视图执行其他初始化步骤 从nib文件加载。
所以,在你的控制器中你可以这样做:
- (void)viewDidLoad
{
[super viewDidLoad];
// your other views here
// call addSubview method on self.view
}
你为什么这样做?因为在这里你确定视图已经加载到内存中并且插件已经正确设置。
相反,关于loadView
方法
如果您覆盖此方法以手动创建视图, 您应该这样做并将层次结构的根视图分配给 查看属性。 (您创建的视图应该是唯一的实例和 不应与任何其他视图控制器对象共享。) 这种方法的自定义实现不应该调用super。
一个例子可能是:
- (void)loadView
{
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];
contentView.backgroundColor = [UIColor whiteColor];
self.view = contentView;
// call addSubview method on self.view
}
我建议你阅读View Controller Programming Guide for iOS。
希望它有所帮助。
答案 1 :(得分:1)
内部viewDidLoad
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0,2,150,100)];
[self.view addSubView:lbl];
答案 2 :(得分:1)
AFAIK,无法以编程方式修改nib文件。
您可以将视图添加到UIViewController方法的viewDidLoad中。