我是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 = ??????;
}
}
在我发现的教程和论坛的所有情况中,segue启动的ViewController始终是destinationViewcontroller的委托。在我的情况下它是不同的。
答案 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中触发。