2016-07-26 4 views
1

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

 ViewController *ViewController = [[ViewController alloc] init]; 
     ViewController.modalPresentationStyle = UIModalPresentationFormSheet;    
     UINavigationController *navLayersViewController = [UINavigationController alloc] initWithRootViewController:ViewController]; 
[self presentViewController:navLayersViewController 
         animated:YES 
        completion:^{ 

        }]; 

Я хочу, чтобы получить текущий экземпляр этого preseneted «ViewController» в какой-то другой class.How я могу получить его. Заранее спасибо!

ответ

0

необходимо сначала представить контроллер навигации.

ViewController *myViewController = [[ViewController alloc] init]; 
    myViewController.modalPresentationStyle = UIModalPresentationFormSheet;    
    UINavigationController *navLayersViewController = [UINavigationController alloc] initWithRootViewController:myViewController]; 

Если вы представляете это в классе контроллера представления, а затем сделать

[self presentViewController: navLayersViewController animated:YES completion:nil]; 

еще получить ссылку на корневой контроллер, а затем сделать

[rootController presentViewController: navLayersViewController animated:YES completion:nil]; 
0

Если вам нужно два viewcontrollers в знаете друг о друге, у вас проблема архитектуры.

Как правило, ваш VC обрабатывает только визуальные/пользовательские интерфейсы, такие как анимация или касания кнопок. Эти вещи, очевидно, не нуждаются в выходе из VC (VC2 не заботится о том, что VC1 имеет затухающую анимацию или 3 кнопки).

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

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

Из VC1 вы можете сделать myService.GetListOfMessages(); (например), и ничто не мешает вам делать это из другого класса, используя ту же самую услугу. Теперь вы можете получить доступ к списку сообщений от VC1, VC2 или где угодно.

Имейте в виду, что в целом ваш VC не должен делать ничего, что не связано с визуальными эффектами. Если вы выполняете вызовы webservice, бизнес-логику или что-то в этом роде, она принадлежит другому классу. Таким образом, он организован (что должно быть достаточно само по себе), но также, если ваши визуальные изменения меняются или вам нужна одна и та же логика где-то еще, вы уже готовы к классу.

Это не полный пример, но если вам достаточно удобно программировать, вы должны просто прекрасно это реализовать.

Только будьте осторожны:

  • Не злоупотребляйте одиночек, или хуже, статика.
  • Не забывайте об одной ответственности (не запихивайте все в одном классе).
  • Не делайте вызовы webservice, которые не нужны. Если это данные, которые вы используете много, просто сохраните их в памяти.

Учитывая все это, вы должны быть в порядке, и ваши контроллеры фактически будут обрабатывать меньше работы, сохраняя при этом доступ к необходимым им данным.

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