проблема, связанная с viewWillAppear - PullRequest
0 голосов
/ 30 марта 2010

Не дав вам все мои примеры кода, я сделаю это быстро.

Случалось ли когда-нибудь с одним из вас вызывать viewWillAppear только при первом его обнаружении?

У меня такая проблема со всеми моими взглядами.

Например: когда мое приложение запускается, я попадаю в StartView, который является главным меню. (вызывается viewWillAppear), затем я нажимаю на одну кнопку, которая покажет контроллер навигации (вызывается viewWillAppear). Затем я возвращаюсь в главное меню (оно не вызывается), а затем снова нажимаю на тот же контроллер навигации, и оно не вызывается.

Было бы замечательно, если бы кто-то мог указать мне куда-то, я искал это уже два дня ...

Также, если вам нужно больше примеров кода, я могу дать вам несколько.

Для дальнейшего чтения:

Вот как я называю свой навигационный контроллер:

PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];

UIView *newView = [AppDelegate.navigationController view];

[newView setFrame:CGRectMake(320.0f, 0.0f, 320.0f, 480.0f)];
[UIView beginAnimations:@"RootViewController" context:nil];
[UIView setAnimationDuration:0.3];
newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
UIView commitAnimations];

[AppDelegate.window addSubview:newView];
[AppDelegate.window makeKeyAndVisible];

И вот так я показываю свое меню обратно:

PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];

UIView *newView = [AppDelegate.startViewController view];

newView setFrame:CGRectMake(-320.0f, 0.0f, 320.0f, 480.0f)];
UIView beginAnimations:@"StartViewController" context:nil];
UIView setAnimationDuration:0.3];
newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[UIView commitAnimations];

[AppDelegate.window addSubview:newView];
[AppDelegate.window makeKeyAndVisible];

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Вы можете реализовать UINavigationControllerDelegate в вашем Nav Controller для распространения сообщений viewWillAppear: вниз. Вы можете реализовать сообщение так:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
        [viewController viewDidAppear:animated];
    }
}

Обратите внимание, что это версия viewDidAppear, а не версия ViewWillAppear, но они в основном одинаковы.

Однако вы должны заметить, что тот факт, что вам нужно сделать это, может свидетельствовать о том, что что-то не так в вашем контроллере / коде представления, и вы можете захотеть задать вопрос, предоставив нам больше контекста, чтобы ответить на него. В частности, я предполагаю, что где-то за пределами кода, который вы нам даете, вы нажимаете и выталкиваете контроллеры представления, как обычно для Nav Controller.

1 голос
/ 30 марта 2010

viewWill / DidAppear: будет вызываться только при использовании UINavigationController или UITabBarController (или действительно любого управляющего класса, предоставляемого системой-viewControlller) для манипулирования представлениями. Если вы делаете это вручную (как вы, кажется, делаете во втором фрагменте кода, эти сообщения не будут отправлены.

...