Я добавляю кнопку в середине моего initWithNibName:bundle:
, когда я добавляю представление кнопки в self.view, представление начинает инициализироваться до добавления кнопки. Таким образом, код в viewDidLoad
срабатывает до завершения initWithNibName:bundle:
. Под addSubview находится код, на который опирается viewDidLoad
, и он вызывает сбой/не работает, поскольку код инициализации не запущен.
У меня был такой же опыт, когда я добавил код кнопки в метод viewDidLoad
. В .xib есть UITableView, и таблица запускается до того, как запускается остальная часть viewDidLoad, что приводит к тому, что tableView получает неверные данные.
Каков наилучший способ добавления представления в представление при инициализации и загрузке представления? просто поместить все addSubViews перед возвратом?
Спасибо!
Вот мой initWithNibName:bundle:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nil];
[self setIoUIDebug:(IoUIDebugSelectorNames)];
if (IoUIDebug & IoUIDebugSelectorNames) {
NSLog(@"%@ - %@", [self description], NSStringFromSelector(_cmd) );
}
CGRect frame = CGRectMake(20, 521, 500, 37);
saveButton = [UIButton newButtonWithTitle:NSLocalizedStringFromTable(@"Save Animation Label",@"ScreenEditor",@"Save Animation Label")
target:self
selector:@selector(saveButtonPressedAction:)
frame:frame
image:[UIImage imageNamed:@"BlueButtonSmall.png"]
imagePressed:[UIImage imageNamed:@"BlueButtonSmallPressed.png"]
darkTextColor:NO];
[self.view addSubview:saveButton]; // <- Right here I'll hit breakpoints in other parts of viewDidLoad and cellForRowAtIndexPath, before the lined below get executed.
[saveButton setEnabled: NO];
[saveButton setUserInteractionEnabled: NO];
newAnimation = nil;
selectedSysCDAnimation = nil;
selectedIoCDTag = nil;
animationSaved = NO;
return self;
}