我一直在学习很多关于弹出窗口的知识,并找到了如何让他们使用代表优雅地解雇。我现在的问题是我的程序中有一个由UINavigationController
控制的弹出窗口。
当用户按下我的父ViewController
上的按钮时,弹出窗口应该按原样出现,用户可以使用表格浏览3个场景。一切正常,直到解雇流行音乐的时候。
在最后一个场景中,我想在用户按下索引时关闭popover。如果我没有UINavigationController
附加到这些视图,那将很容易。我不知道如何实现委托。
我尝试在我的UINavigationController
实现中创建一个委托,但XCode告诉我UINavigationController
已经有一个委托。有没有办法使用已经存在的代理?
非常感谢任何帮助。
答案 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后应该有一个冒号...见上文。没有它,编译器就崩溃了。
除此之外......我想对此表示感谢!它解决了一个解雇问题,我将在另一个问题上尝试。