Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios6 在同一viewcontroller中的两个容器之间传递数据_Ios6_Uistoryboard_Uistoryboardsegue - Fatal编程技术网

Ios6 在同一viewcontroller中的两个容器之间传递数据

Ios6 在同一viewcontroller中的两个容器之间传递数据,ios6,uistoryboard,uistoryboardsegue,Ios6,Uistoryboard,Uistoryboardsegue,我是iOS编程新手,我读了很多教程和论坛,但我仍然无法找到管理项目的最佳方法 我想要的是iPad屏幕能够并排显示CollectionView和TableView。 CollectionView中的操作应更改TableView内容。由于拆分的大小固定,SplitViewController将不执行此任务 现在我正在使用故事板,我创建了一个ViewController,并在其中添加了两个ContainerView。每个容器由XCode生成的序列链接到视图控制器(LeftViewController和

我是iOS编程新手,我读了很多教程和论坛,但我仍然无法找到管理项目的最佳方法

我想要的是iPad屏幕能够并排显示CollectionView和TableView。 CollectionView中的操作应更改TableView内容。由于拆分的大小固定,SplitViewController将不执行此任务

现在我正在使用故事板,我创建了一个ViewController,并在其中添加了两个ContainerView。每个容器由XCode生成的序列链接到视图控制器(LeftViewController和RightViewController)

我正试图找出最聪明的方法来管理LeftViewController上的操作,并将更改发送到RightViewController


我想使用看起来更优雅的故事板,但我不确定如何实现这一点。

假设您知道建立委托方法的方法(@protocol,请参阅),关键元素将是在加载容器时抓取嵌入容器中的两个viewController,将主viewController设置为委托,当事情发生变化时发送信息。首先,如果控制器之间的通信需要双向流动,那么为每个VC设置一个实例变量

给定VCPrime、CollectionVC和TableVC:

首先,在故事板中,命名每个片段(从ContainerView到VCs)。在VCPrime中,执行prepareforsgue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"collection"]) {
        self.collectionVC = (CollectionVC *)[segue destinationViewController];
        self.collectionVC.delegate = self;
    }
    if ([segue.identifier isEqualToString:@"table"]) {
        self.tableVC = (TableVC *)[segue destinationViewController];
        self.tableVC.delegate = self;
    }
}
您还必须在VCPrime中实现委托方法,并声明
CollectionDelegate、TableDelegate
,或者以您命名的方式声明它们

在CollectionVC中,当有人选择某个对象(或任何对象)时,请检查委托是否响应您的委托方法,然后发送该消息:

if ([self.delegate respondsToSelector:@selector(doSomething)]) [self.delegate doSomething];
然后在调用的方法中修改TableVC


这只是一个简短的概述。互联网上充满了优秀的代码示例。

我想我的Swift可能有所改进(答案很旧,但我一天前就遇到了这个问题)。我在Swift中重新实现了上面的内容,但有一点扭曲。我不会将VCPrime设置为CollectionVC和TableVC的委托,而是将TableVC设置为CollectionVC的委托。这是因为CollectionVC需要控制TableVC。一般来说,我们可以称“主VC”为控制对象,“委托VC”为受控制对象。为了确保当我将一个VC设置为另一个VC的委托时,这两个VC都被实例化,我使用了Swift选项和可选绑定。下面是一个代码示例”(请注意,主机需要有一个“委托”属性,您可能需要声明适当的协议):


您希望使主viewController成为容器中两个控制器的代理,并在它们之间传递信息。如果您需要代码示例,我将提供一些。非常感谢,这就是我一直在等待的答案。欢迎使用代码示例:)谢谢!使用代理很好。我以为segues只用于tra全屏页面之间的连接。
import UIKit

class ContainerController: UIViewController {

    private var masterViewController: myMasterViewController?
    private var delegateViewController: myDelegateViewController?

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "myMasterViewController" {
            masterViewController = segue.destinationViewController as? myMasterViewController
        } else if segue.identifier == "myDelegateViewController" {
            delegateViewController = segue.destinationViewController as? myDelegateViewController
        }
        if let master = masterViewController, delegate = delegateViewController {
            println("Master and delegate set")
            master.delegate = delegate
        }
    }
}