Swift:从UIScrollView访问父ViewController Segue

时间:2016-02-24 10:19:11

标签: ios swift uiscrollview segue

到目前为止我有什么

我有一个视图控制器ViewController1,它有2个segue,一个转到ViewController2,另一个回来。

来自vc2 - vc1的segue被称为" ViewC2toViewC1Segue "

在ViewController2上我有一个UIScrollView,可以加载两个新的viewcontrollers并允许我向左或向右滚动来查看它们。

所有这些工作正常,数据显示正常,一切都很好。但是,在其中一个子视图中,我希望能够显示返回ViewController1的选项。

在我的天真中,我尝试过使用:

performSegueWithIdentifier("ViewC2toViewC1Segue", sender: self)

我希望这张图片有助于解释:

enter image description here

问题

这两个视图控制器在UIScrollView中加载或不在主故事板上加载,因此我无法进行CTRL和DRAG。

问题

如何从UIScrollViews子视图容器之一访问持有UIScrollView的视图控制器(ViewController2)的segue(ViewC2toViewC1Segue)。

我希望这是有道理的。

2 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是使用委托协议。您的父视图控制器将是子代理。当按下该按钮时,它会向其委托(父级,具有滚动视图)发送消息,并且父句柄会滚动到另一个视图控制器。

在ChildViewController文件中,您想要做三件事:

  1. 定义委托协议。这是委托对象需要实现的一组函数。
  2. 向ChildVC类添加delegate属性。这允许ChildVC调用委托上的函数。
  3. 按下按钮时调用委托功能
  4. 协议声明看起来像这样

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

    delegate变量声明如下所示:

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

    要调用委托函数,在按钮处理程序代码中只需编写:

    delegate.childViewControllerDidSelectBack(self)

    在ParentViewController文件中,您想要做三件事:

    1. 将自己设为ChildVC的代表
    2. 声明您符合ChildVCDelegate协议
    3. 实施委托协议方法
    4. 要将自己设置为委托,每当您实例化子VC时,请执行以下操作:

      childVC.delegate = self

      要声明您符合协议,请使您的类定义如下:

      class ParentViewController: UIViewController, ChildViewControllerDelegate

      最后,您需要实现协议功能

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

      希望这有帮助!

答案 1 :(得分: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];