我的应用程序启动到导航控制器。根视图控制器有一个按钮,该按钮创建一个带有 tableViewController 的弹出框,允许用户选择一个单元格,该单元格使用 TableViewController 的委托在通过“preperaForSegue”创建弹出框时设置,与根视图控制器通信并将相关的 ViewController 推送到导航堆栈上。
委托集如下:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"planningSegue"])
{
[segue.destinationViewController setDelegate:self];
}
}
方法调用如下:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[self delegate] gotoPlanningToPage:[tableView cellForRowAtIndexPath:indexPath].textLabel.text];
}
这很好用。
我在根视图控制器上有另一个按钮,它使用不同的 tableViewController 调出不同的弹出框,这个按钮有一个选项列表,每个选项在选择时都会将另一个表视图放到堆栈上(仍在弹出框内),其中包含一个物品清单。选择其中一个需要与主 ViewController(最初创建弹出框的那个)进行通信,以将新视图推送到其导航堆栈中,类似于第一个按钮的操作方式。
问题:如何/在哪里为第二个 tableViewController 设置委托?
创建弹出框时我无法创建它,因为第二个 tableViewController 仅在第一个 TVC 中选择一个单元格时才存在。但是当第二个 TVC 被调用时,我无法弄清楚如何从第一个 TVC 设置它,因为我看不到能够与弹出框的创建者(父级?)进行通信的方法。
我唯一的想法是将主 ViewController 设置为弹出窗口中第一级 TVC 的代表,然后将该 TVC 设置为第二级 TVC 的代表,并通过一个将消息传递回另一个......虽然这并不正确,但我不禁想到必须有一种更简单/更清洁的方式来做这件事,而不是创建一个委托,其唯一目的是帮助其他东西设置它的委托!
我对这一切还比较陌生,所以如果我没有说清楚或者我错过了一些明显的东西,请道歉!