popviewcontroller не вызывает viewWillappear - PullRequest
6 голосов
/ 27 сентября 2011

Я использую следующий код для отображения предыдущего представления, когда пользователь нажимает кнопку

[self.navigationController popViewControllerAnimated:YES];

В предыдущем представлении я перезаписываю viewWillAppear для нескольких инициализированных вещей. Тем не менее, похоже, что viewWillAppear не вызывается. Я поместил NSLog в viewDidload, viewWillAppear, viewDidAppear и вызывается только viewDidAppear. Это нормальное поведение? Если да, какое событие мне следует переопределить, чтобы я мог выполнить свою инициализацию? Спасибо.

По запросу -viewWillAppear для предыдущего просмотра

- (void)viewWillAppear:(BOOL)animated{

    NSLog(@"ViewWillAppear");
        //[[GameStore defaultStore] resetGame];
        [self setHangmanImage];

    NSLog([[[GameStore defaultStore] selectedList] label]);
        [labelListName setText:[NSString stringWithFormat:@"List Name: %@", [[[GameStore defaultStore] selectedList] label]]];
        [labelCurrentIndex setHidden:YES];
        [labelCurrentWord setHidden:YES];
        [[self navigationController] setNavigationBarHidden:NO];

        [FlurryAnalytics logEvent:@"GameViewController - viewWillAppear"];

        [self getNewQuestion];

    NSLog(@"ViewWillAppear finish");
    [super viewWillAppear:YES];

}

Я установил UINavigationalController в делегате приложения, используя следующий код

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    HomeViewController *hv = [[HomeViewController alloc] init];

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:hv];

    // You can now release the itemsViewController here,
    // UINavigationController will retain it
    [hv release];

    // Place navigation controller's view in the window hierarchy
    [[self window] setRootViewController:navController];


    [navController release];


    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];
    return YES;
}

UPDATE

Я не знаю, что случилось, но прошлой ночью, после попытки запустить приложение еще раз в симуляторе, и у него все еще есть эта проблема, я решил сохранить все и выключил свой компьютер, так как стало поздно.

Этим утром я снова включил мой компьютер, открыл xcode, очистил проект, собрал и запустил его, и я исправил проблему и вызвал -viewWillAppear. Я ничего не изменил, и это работает. Я добавил NSLog в -willShowView, и он не вызывается. Я не знаю, почему внезапно вызывается viewWillAppear.

Ответы [ 3 ]

9 голосов
/ 27 сентября 2011

Убедитесь, что делегат вашего контроллера навигации установлен, и затем используйте эту функцию для вызова viewWillAppear в классе, viewWillAppear которого вы хотите вызвать:

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{
    [self viewWillAppear:animated];
}
4 голосов
/ 08 февраля 2016

Я столкнулся с проблемой почти так же, и после некоторого тестирования обнаружил, что вызов popViewControllerAnimated: в блоке (из ответа сети в AFNetworking) viewDidAppear не вызывается в родительском представлении. Решение, которое сработало для меня, заключалось в том, чтобы вместо этого вызывать его в главном потоке.

dispatch_async(dispatch_get_main_queue(), ^{
    // If not called on the main thread then the UI doesn't invoke the parent view's viewDidAppear
    [self.navigationController popViewControllerAnimated:YES];
});
0 голосов
/ 18 июля 2019

Я только что столкнулся с этой проблемой, а коренная причина этой проблемы заключается в том, что я поместил self.navigationController.delegate = self в viewDidLoad.Мое решение состоит в том, чтобы поместить делегирование в viewWillAppear:

- (void)viewWillAppear:(BOOL)animated{
   [super viewWillAppear:animated];
   self.navigationController.delegate = self;
}

После этого popViewController ударит viewWillAppear.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...