С учетом того, как у меня все настроено в моем первом проекте для iPad, мне стало любопытно, почему обычные вызовы методов не работают так, как я думаю.
В представлении внутри initWithFrame я делаю указатель делегата следующим образом:
mainMenuAppDelegate *del = (mainMenuAppDelegate *)[[UIApplication sharedApplication] delegate];
И сделайте такую кнопку:
CGRect backBTNFrame = CGRectMake(25, 30, 140, 52);
backButton_video = [[UIButton alloc] init];
backButton_video.frame = backBTNFrame;
backBtnImg_video = [UIImage imageNamed:@"SHIP_button_back.png"];
[backButton_video setImage:backBtnImg_video forState:UIControlStateNormal];
backButton_video.backgroundColor = [UIColor clearColor];
[self addSubview:backButton_video];
[backButton_video addTarget:self
action:@selector(kill_timers)
forControlEvents:UIControlEventTouchUpInside];
[backButton_video addTarget:del.switchVC
action:@selector(gotoMain)
forControlEvents:UIControlEventTouchUpInside];
Я нажимаю кнопку, и она вызывает метод из контроллера представления:
- (void)gotoMain{
NSLog(@"switch to main");
for(UIView *v in [containerView subviews]) {
[v removeFromSuperview];
}
MainMenu *mainMenu = [[MainMenu alloc] init];
mainMenu.frame = CGRectMake(0, -20, 1024, 768);
[containerView insertSubview:mainMenu atIndex:0];
[mainMenu release];
}
Это избавляет от вида, в котором я находился, и добавляет вид главного меню. Это отлично работает.
Однако, если я сделаю указатель делегата, как это было раньше, и вызову метод self kill_timers и метод контроллера представления gotoMain, он не будет работать:
mainMenuAppDelegate *del = (mainMenuAppDelegate *)[[UIApplication sharedApplication] delegate];
[self kill_timers];
[del.switchVC gotoMain];
В консоли я вижу сообщение, что он убивает таймер, что и делает, но у меня есть NSLog, готовый к запуску в контроллере вида, но ничего не появляется. Просто не бывает. Есть какие-нибудь подсказки? Почему кнопка и обычный вызов метода ведут себя по-разному?