iOS解除UINavigationController中的弹出窗口

时间:2013-01-25 22:07:33

标签: ios

我一直在学习很多关于弹出窗口的知识,并找到了如何让他们使用代表优雅地解雇。我现在的问题是我的程序中有一个由UINavigationController控制的弹出窗口。

当用户按下我的父ViewController上的按钮时,弹出窗口应该按原样出现,用户可以使用表格浏览3个场景。一切正常,直到解雇流行音乐的时候。

在最后一个场景中,我想在用户按下索引时关闭popover。如果我没有UINavigationController附加到这些视图,那将很容易。我不知道如何实现委托。

我尝试在我的UINavigationController实现中创建一个委托,但XCode告诉我UINavigationController已经有一个委托。有没有办法使用已经存在的代理?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我认为在这种情况下使用通知可能会更好,因为您想要开始解雇的控制器远离应该解雇的弹出控制器(因此很难设置委托)。如果您在故事板中使用popover segue,则可以从segue对象获取对弹出控制器的引用。从启动popover segue的控制器,我把这段代码:

@implementation ViewController {
    UIPopoverController *pop;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPopover) name:@"DismissPopoverNotification" object:nil];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    pop = [(UIStoryboardPopoverSegue *)segue popoverController];
}

-(void)dismissPopover {
    [pop dismissPopoverAnimated:YES];
}

在最后一个控制器中,选择表中的行会导致弹出窗口被解除,您可以在didSelectRowAtIndexPath方法中使用此代码:

[[NSNotificationCenter defaultCenter] postNotificationName:@"DismissPopoverNotification" object:self];

答案 1 :(得分:0)

我使用通知很多来回传递数据。这条额外的一行,我不知道......

pop = [(UIStoryboardPopoverSegue *)segue popoverController];

然而,我确实想指出一个错过的细节......

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissPopover:) name:@"DismissPopoverNotification" object:nil];

dismissPopover后应该有一个冒号...见上文。没有它,编译器就崩溃了。

除此之外......我想对此表示感谢!它解决了一个解雇问题,我将在另一个问题上尝试。