В UIViewControllers, где я не использую .xib-файлы, я создавал свои элементы пользовательского интерфейса в методах viewDidLoad. Например,Где добавить объекты пользовательского интерфейса при программном создании пользовательского интерфейса (вместо .xib/раскадровки)
- (void)viewDidLoad {
[super viewDidLoad];
// Setup table
self.tableView=[[UITableView alloc] initWithFrame:self.view.frame];
[self.tableView setDataSource:self];
[self.tableView setDelegate:self];
[self.view addSubview:self.tableView];
// Setup custom cells
UINib *lessonNib=[UINib nibWithNibName:@"CustomCell" bundle:nil];
[[self tableView] registerNib:lessonNib forCellReuseIdentifier:@"CustomCellID"];
}
По большей части это прекрасно работает. Но, в процессе изучения ошибки, связанной с динамическими высотами ячеек, мне любопытно: это подходящее место для добавления элементов интерфейса?
Спасибо за чтение.
это может быть подходящее место для их создания и добавления - НО это неправильное место для установки их макета, например. их кадров. – luk2302
Привет @ luk2302, спасибо за комментарий. Для фреймов и других элементов компоновки это связано с тем, что еще не были установлены элементы макета в viewDidLoad (и поэтому мой 'self.view.frame' может быть пустым или иным образом бессмысленным)? Означает ли это, что «viewWillAppear» - самое раннее присвоенное место? – Rogare
Почему viewDidLoad неверен для установки фреймов? Можете ли вы привести мне причины? : P –