【发布时间】:2012-03-19 16:49:03
【问题描述】:
我的应用程序启动到导航控制器。根视图控制器有一个按钮,该按钮创建一个带有 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 的代理并通过其中一个传递消息,到另一个...虽然这不正确,但我不禁要说,必须有一种更简单/更清洁的方法来做到这一点,而不是创建一个委托,其唯一目的是帮助其他东西设置它的委托!
我对这一切还是比较陌生,所以如果我没有说清楚或者我错过了一些明显的东西,请道歉!
【问题讨论】:
标签: objective-c ios delegates uitableview uipopover