2016-09-13 3 views
3

У меня есть родительский ViewController с двумя контроллерами subview.Вызов родительской функции View Viewer из подзона

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

Это то, что я планирую - поместите кнопку на диспетчеру просмотра subview. Нажатие кнопки вызовет функцию в родительском контроллере просмотра, который отвечает за скользящий. прямо сейчас я не могу вызвать функцию родительского viewcontroller. Мне нужен текущий экземпляр родительского контроллера. Может ли кто-нибудь помочь?

на картинке, серый подвид ViewController 1 зеленый цвет является подвид ViewController 2. нажав на кнопки viewcontroller1 должна скользить ViewController 2

Please click here for screen print

+0

Что вы пытаетесь? делитесь кодом, пожалуйста. есть ошибки? если да, то что это? –

+0

@ NazmulHasan - Три монитора просмотра - VC1, VC2 и VC3. VC1 является родительским, а VC2, VC3 - подчиненными. VC1 отображает как VC2, так и VC3 как стиль карты, которые можно прокручивать влево или вправо (эта часть работает). Я хотел бы иметь кнопку на VC2, так что при щелчке она автоматически сместится на VC3 – NKay

+1

! вы можете сделать по протоколу –

ответ

1

Есть два решения я могу думать офф в верхней части головы:

  1. Сделайте свою кнопку подчиненным элементом родительского контроллера; это, очевидно, не будет работать, если вы хотите, чтобы ваша кнопка была подчиненной для одного из представлений контроллера детского просмотра;
  2. Чтобы расширить предложение @ NazmulHasan, вы можете реализовать собственный протокол для контроллеров вашего дочернего представления. Чтобы взять контроллер детского представления 1 в качестве примера, вам просто нужно объявить протокол делегата для этого класса. Это говорит о том, что компилятор, который выполняет функции делегата контроллера представления, должен реализовать, чтобы удовлетворить протокол. Так что вы могли бы сделать что-то вроде этого:

    протокол childViewControllerOneDelegate { функ buttonWasPressed (отправитель: UIButton) -> Пустота {

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

var myDelegate : childViewControllerOneDelegate! 

Это неявно развернутая по желанию, потому что вы не можете установить делегат при инициализации класса; вы установите его, как я расскажу ниже.

В самой верхней части родительской декларации вид класса контроллера, вы затем объявить, что контроллер представления соответствует этому протоколу:

class parentViewController : UIViewController, childViewControllerOneDelegate ... Etc, etc { 

При инициализации childViewControllerOne из контроллера родительского вида, вы можете добавить линия прямо потом, что говорит:

myChildViewControllerOne.delegate = self 

Наконец, возвращаясь к кнопке и контроллеру представления ребенка, вы просто добавить действие на него, что вызывает следующее:

self.myDelegate.buttonWasPressed(self.button) 

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

Надеюсь, что помогает.Как всегда с этими ответами, я пытаюсь сжать много информации в небольшое пространство, поэтому напишите мне, если у вас есть какие-либо вопросы. Всего найлучшего!

+0

Большое спасибо. Это сработало! – NKay

0

Вы можете использовать перекрестные ссылки. После инициализации вам нужно будет передать слабую ссылку родительского элемента viewController.