Почему мой метод viewWillAppear не вызывает каждый раз, когда я go возвращаюсь к моему родительскому представлению - PullRequest
2 голосов
/ 22 марта 2020

Это мой файл viewController.m

- (IBAction)defaultAction:(id)sender {
    SimpleViewController *simpleView = [[SimpleViewController alloc]init];
    [self presentViewController:simpleView animated:YES completion:nil];
}

- (IBAction)flipAction:(id)sender {
    SimpleViewController *simpleView = [[SimpleViewController alloc]init];
    [simpleView setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentViewController:simpleView animated:YES completion:nil];
}

- (IBAction)dissolveAction:(id)sender {
    SimpleViewController *simpleView = [[SimpleViewController alloc]init];
    [simpleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self presentViewController:simpleView animated:YES completion:nil];
}



- (IBAction)pageCurlAction:(id)sender {
    self.callFromPageCurl = true;
    SimpleViewController *simpleView = [[SimpleViewController alloc]init];
    simpleView.delegate = self;
    [simpleView setModalPresentationStyle:UIModalPresentationFullScreen];
    [simpleView setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self presentViewController:simpleView animated:YES completion:nil];
}

- (IBAction)showWithDelegate:(id)sender {
    self.callFromShowWithDelegate = true;
    SimpleViewController *simpleView = [[SimpleViewController alloc]init];
    simpleView.delegate = self;
    [self presentViewController:simpleView animated:YES completion:nil];
}


- (void)didReceiveMessage:(NSString *)message{
    self.myMessage.text = message;
}

- (void)viewWillAppear:(BOOL)animated{
    self.callFromShowWithDelegate = false;
    self.callFromPageCurl = false;
    NSLog(@"Called first");
}

, и это мой файл simpleViewController.m

- (IBAction)dismissMeAction:(id)sender {
    if(self.delegate.callFromShowWithDelegate)
        [self.delegate didReceiveMessage:@"Hello World"];
    else
        [self.delegate didReceiveMessage:@"My Message"];
    if(self.delegate.callFromPageCurl == true)
        [self dismissViewControllerAnimated:NO completion:nil];
    else
        [self dismissViewControllerAnimated:YES completion:nil];
}

Когда я использую pageCurl для go до следующего просмотра и я вернулся к основному представлению, он снова вызывает метод viewWillAppear. Но если я go перешел к следующему представлению, используя любую другую кнопку, и вернулся к главному представлению, он не вызывает метод viewWillAppear. Но почему? Разве он не вызывал метод viewWillAppear каждый раз, когда я возвращался к главному виду.

1 Ответ

2 голосов
/ 22 марта 2020

Если вы использовали модальное представление для контроллера представления до iOS 13, поведение по умолчанию представляет контроллер модального просмотра в полноэкранном режиме, и когда контроллер модального представления отклоняется, функция viewDidAppear будет вызываться при представлении. контроллер представления (ie. контроллер представления, который отвечает за представление контроллера модального представления).

Однако в iOS 13 поведение по умолчанию представления контроллера модального представления заменяется карточным анимация (официальный термин для этого - лист страницы)


В iOS 13 + , необходимо установить правильный presentationStyle . Если вы хотите, чтобы ваш представленный контроллер был fullScreen и вызывал предыдущий viewWillAppear, тогда вы можете использовать " UIModalPresentationFullScreen "

- (IBAction)defaultAction:(id)sender {
    SimpleViewController *simpleView = [[SimpleViewController alloc]init];
    [simpleView setModalPresentationStyle:UIModalPresentationFullScreen];
    [self presentViewController:simpleView animated:YES completion:nil];
}

Вы также можете изменить это в своем перо / раскадровке :

enter image description here

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