2016-02-24 6 views
0

То, что я до сих пор

У меня есть контроллер представления ViewController1, который имеет 2 перетекает, тот, который идет в ViewController2 и тот, который приходит обратно.Swift: Доступ Родитель ViewController Segue от UIScrollView

переход от VC2 - vc1 называется «ViewC2toViewC1Segue»

На ViewController2 У меня есть UIScrollView, который загружает в двух новых viewcontrollers и позволяет мне прокрутку влево или вправо, чтобы просмотреть их.

Все это прекрасно работает, данные показывают хорошо, и все выглядит хорошо. Тем не менее, в одном из этих подпрограмм я хочу иметь возможность отображать опцию, чтобы вернуться в ViewController1.

в моей наивности я попытался просто использовать:

performSegueWithIdentifier("ViewC2toViewC1Segue", sender: self) 

Я надеюсь, что это изображение помогает объяснить:

enter image description here

Проблему

Эти два viewcontrollers, которые загружаются в UIScrollView или нет на главной раскадровке, поэтому я не могу использовать CTRL и DRAG.

Вопрос

Как получить доступ к SEGUE (ViewC2toViewC1Segue) контроллера вида (ViewController2), которая удерживает UIScrollView от одного зрения контейнеров UIScrollViews ребенка.

Надеюсь, это имеет смысл.

+0

Почему вы не добавляете контроллеры дочерних представлений UIScrollViews как фактически контроллеры дочерних представлений ViewController2, чтобы они могли получить доступ к своим родителям и выполнить функцию оттуда? – dccarmo

ответ

0

Здесь вы можете использовать метод уведомления.

  • Нажатие кнопки на одном из ваших сообщений ViewController (в прокрутке) .
  • Добавить наблюдателя в метод ViewController2 viewDidLoad.
  • Вернуться к ViewController1 в методе выбора.

================================================================================================================================ =======

//ViewController2 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(navigateToViewController1) name:@"navigateToViewController1" object:nil]; 

// Do any additional setup after loading the view from its nib. 
} 

-(void)navigateToViewController1 { 
    //[self.navigationController popViewControllerAnimated:YES]; 
    OR 
    // perform segue 
} 



//In button click event of your viewcontroller inside scrollview. 

[[NSNotificationCenter defaultCenter] postNotificationName:@"navigateToViewController1" object:nil]; 
1

Лучший способ сделать это с помощью протокола делегата. Контроллер родительского представления будет делегатом дочернего элемента. Когда кнопка нажата на дочерний элемент, она отправляет свой делегат (родитель, у которого есть представление прокрутки), а родительские ручки прокручиваются до другого контроллера представления.


В файле ChildViewController, вы хотите сделать 3 вещи:

  1. определить протокол делегата. Это набор функций, которые должен реализовать объект делегата.
  2. Добавить объект delegate в класс ChildVC. Это позволяет ChildVC вызывать функции делегата.
  3. Вызов функции делегата при нажатии кнопки

Декларации протокол будет выглядеть как этот

protocol ChildViewControllerDelegate: class { func childViewControllerDidSelectBack(childViewController: ChildViewController) }

delegate объявление переменной будет выглядеть так:

class ChildViewController: UIViewController { weak var delegate: ChildViewControllerDelegate? }

Чтобы вызвать делегат съела функцию в вашей кнопки кода обработчика просто написать:

delegate.childViewControllerDidSelectBack(self)


В файле ParentViewController, вы хотите сделать 3 вещи:

  1. Установить себя в качестве делегата для ChildVC
  2. Заявить, что вы соответствуете протоколу ChildVCDelegate
  3. Внедрить методы протокола делегата

Чтобы установить себя в качестве делегата, всякий раз, когда вы создаете экземпляр ребенка VC, сделать что-то вроде:

childVC.delegate = self

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

class ParentViewController: UIViewController, ChildViewControllerDelegate

Наконец, необходимо реализовать функцию протокола

func childViewControllerDidSelectBack(childViewController: ChildViewController){ // code to scroll the scrollview } }


Надеется, что это помогает!

+0

Эй, спасибо за это. Я немного нуоби, когда дело доходит до быстрой. Не могли бы вы предоставить немного больше деталей? Я смущен, как назвать этот протокол нажатием кнопки и т. Д. – JamesG

+0

Обновлено, дайте мне знать, если это более понятно – pdesantis

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