Как я могу отклонить modalViewController, не выходя из текущего представления?

#iphone #uitabbarcontroller #uitabbar #modalviewcontroller #presentmodalviewcontroller

#iPhone #uitabbarcontroller #uitabbar #modalviewcontroller #presentmodalviewcontroller

Вопрос:

Мое приложение основано на представлении. Первый вид — это вид входа в систему. После просмотра входа в систему у меня есть MainMenuCcontroller, в котором есть TabBarController:

  @interface RunnoMainMenuController : UIViewController {
IBOutlet UITabBarController *tabBarController;
 }
  

Из контроллера представления входа я перехожу в MainMenuController, используя эту строку кода:

  [self presentModalViewController:mainMenu animated:YES];
  

этот контроллер имеет 4 вкладки. Теперь мне нужно кое-что сделать в viewWillAppear элемента TabBarItem. viewWillAppear не вызывается, когда я нажимаю на TabBarItem. У меня есть кнопка в одном из этих представлений TabBarItem, которая выводит контроллер представления таблицы с использованием presentModalViewController. Этот TableView использует dismissModalViewControllerAnimated:YES, чтобы удалить его. Когда я открываю этот tableview и отклоняю его, viewWillAppear каждого элемента TabBarItem работает нормально. Если я отклоню modalViewController в MainMenuController, он снова вернется к просмотру входа. Как я могу отклонить modalViewController, не выходя из текущего представления или любого другого решения? Заранее спасибо.

Ответ №1:

Возможно, вам потребуется рассмотреть, как представлены ваши представления. Контроллер панели вкладок всегда должен быть контроллером корневого представления окна. Из документов Apple:

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

Вместо того, чтобы представлять свой вид входа в систему как корневой вид, а панель вкладок — как контроллер модального представления, попробуйте наоборот. Контроллер панели вкладок как root, с представлением входа в систему, представленным как контроллер модального представления из контроллера представления любой вкладки, которая отображается изначально. Отклонение этого приведет к открытию контроллера панели вкладок.