Delegates / Protocols / ViewControllers,prepareForSegue-Method

时间:2014-06-09 12:25:44

标签: ios objective-c delegates protocols segue

我是xcode的新手,我遇到了Viewcontrollers / delegates / protocols的问题。 我想在我的代码中实现以下目标:

我有三个ViewControllers。

Viewcontroller1> segue> Viewcontroller2> segue> Viewcontroller3

Viewcontroller1是一个TableViewController。要添加一行(通过按钮),有一个到ViewController2的segue,用户可以在其中选择他想要添加的新行的类型(有4种不同类型的行,它们需要来自用户的不同类型的信息被创造)。根据joyce,他得到(四个不同的一个)ViewController3(通过segue),在那里他插入新行的数据,这将被添加到TableView控制器(VC1)(解散ViewController3并调用“完成和创建“ - 方法)。

要传递数据,我正在使用委托和协议。在我的方法中,ViewController1是ViewController3的委托。 Viewcontroller2实际上并不需要将任何数据传递给其他Viewcontrollers。只有4个不同的按钮可以启动一个segue到4个不同的ViewController3之一,所以我认为没有必要让它成为委托,(或给它一个委托)。

我的问题:

在从ViewController2到ViewController3的segue之前,需要告诉ViewController3(据我所知),他的代表是谁。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"ToViewcontroller3a“]) {

    UINavigationController *navCon = segue.destinationViewController;

    TLTableViewController3a *viewController = [navCon.viewControllers objectAtIndex:0];

    viewController.delegate = ??????;
}

}

  1. 委托层次结构中是否存在此“缺口”(以便上面的segue不是从ViewController3的委托开始的)?
  2. 如果是,我如何在segue 2到3之前告诉ViewController3,ViewController1是它的委托,(“完成并创建”-method在ViewController1中实现)将数据传递给ViewController1以创建新行TableView?
  3. 在我发现的教程和论坛的所有情况中,segue启动的ViewController始终是destinationViewcontroller的委托。在我的情况下它是不同的。

1 个答案:

答案 0 :(得分:0)

你想要的只是将代表控制从V1传递给V3。

因此,当V1中的initializig V2出现时

V2.customdelegate1 = (id)self (customdelegate1 : you synthezise in V2)

然后在V2初始化V3时

V3.customedelegate2 = V2.customdelegate1 (customdelegate2 : you synthezise in V3)

,让V3 cuustom delgate功能

-(void)updateV1Tabe ;

在V1中使用此方法,在V3中输入详细信息后,从那里调用此代理,它将在V 1中触发。