0

У меня есть HomeView и HomeDropDownView.Делегат iOS не нажимает и не представляет вид

HomeDropDownView показан как раскрывающийся вид на HomeView.

HomeView является делегатом HomeDropDownView.

Когда я делаю действие в HomeDropDownView, я хочу вызвать метод делегата в HomeView и предоставить этому методу делегата третий контроллер представлений TestViewController с его навигационного контроллера.

Если я пытаюсь запустить TestViewController с в любом месте в классе, он отлично работает - кроме метода делегата.

В HomeDropDownView есть анимация, но при вызове метода делегата в процессе выполнения не создается диспетчер представлений. И в том случае, если я использую это, анимация не срабатывает; есть только изменение размера без анимации.

Инициатор TestViewController вызывается так же, как viewDidLoad, но не viewWillAppear, и доза просмотра не появляется.

Код:

HomeDropDownView

- (void)finalAction { 
    ... 
    [self callDelegateAction]; 
    ... 

- (void)calldelegateAction { 
    if ([self.delegate respondsToSelector:@selector(launchTestView)]) { 
     [self.delegate launchTestView]; 
    } else { 
     DLog(@"Error out to the user."); 
    } 
} 

HomeView

- (void)launchTestView { 
     //[self listSubviewsOfView:self.parentViewController.view]; 

     NSLog(@"delegate method | self: %@", self); 

     TestViewController *tvc = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil]; 
     //[self.navigationController presentViewController:tvc animated:YES completion:nil]; 
     //[self.view.window.rootViewController presentViewController:tvc animated:YES completion:nil]; 
     //[self.navigationController pushViewController:tvc animated:YES]; 
     AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
     [appdelegate.tabBarController.navigationController presentViewController:tvc animated:YES completion:^() { 
      NSLog(@"Done!"); 
     }]; 
} 

Ни один из вышеперечисленных подходов работы. Но если я поместил тот же самый код в viewDidAppear или поместил его в метод действия кнопки, он будет работать нормально. Во время вызова метода метода делегата HomeView и всех подзонов, включая навигационный контроллер, похоже, есть. Это находится в проекте на основе tabcontroller, но я думаю, что любой из вышеперечисленных способов является приемлемым способом вызова контроллера nav.

Что мне не хватает? Почему мой метод делегата не хочет нажимать/представлять диспетчер представлений на контроллере NavView HomeView? Вероятно, это то, что мне не хватает, но я не могу найти причину в Apple Docs или любом другом потоке. Спасибо за помощь!

+0

Is HomeDropDownПросмотреть modal view controller? Если да, вы пытаетесь показать модальный вид, даже если у вас уже есть другое модальное представление. Это не верно. – Kedar

+0

Пожалуйста, не используйте appdelegate для представления контроллеров представления, это очень плохая практика. – Jeremie

+0

Kedar: Нет, это точка зрения, которая всегда «там» и изменяется при отображении/скрытии. – addzo

ответ

0

К сожалению, это оказалось, что HomeView менялся под выполнением сообщения. Таким образом, к тому времени, когда HomeView получил сообщение, это уже не тот объект HomeView, который запросил действие в первую очередь. Так что это был не тот же делегат. Это было сделано так, чтобы пользователю казалось, что один и тот же вид используется для разных вещей. Но это хороший пример того, почему вы не должны разрушать и воссоздавать критические взгляды. Мы должны были использовать одно и то же представление и перезагружать объекты, если бы знали, что будем отправлять сообщения. Или было какое-то понятие о контрольной структуре.

Смежные вопросы