我的问题可能是技术问题,而不是对如何设置控制器和代理的误解。也就是说,也许我应该采用不同的方式......
无论如何,我有一个带有mainViewController的故事板设置。在其中有一个UIButton
,当点击时,它会切换到一个弹出窗口。 popover的内容视图控制器是UINavigationController
rootViewController
,例如MyViewController
。
我正在尝试将mainViewController
delegate
MyViewController
作为- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:(@"popSleepSegue")] || [segue.identifier isEqualToString:(@"popAlarmSegue")])
{
UIStoryboardPopoverSegue *popSegue = (UIStoryboardPopoverSegue *)segue;
popSegue.popoverController.delegate = self;
popSegue.popoverController.passthroughViews = [NSArray arrayWithObject:self.view];
if ([segue.identifier isEqualToString:@"popAlarmSegue"])
{
if ([[segue destinationViewController] isKindOfClass:[UINavigationController class]])
{
UINavigationController *uNC = (UINavigationController *)[segue destinationViewController];
MyViewController *aVC = (MyViewController *)uNC.topViewController;
aVC.popController = popSegue.popoverController;
aVC.delegate = self;
}
}
}
}
,并且正在准备章节中这样做:
[self.delegate class]
当null
加载时,NSLog
在MyViewController
中出现delegate
。当然,mainViewController
中未收到delegate
回调。
基本上,我试图在iPad上模仿Apple的日历应用程序的行为。
我正在尝试使用委托按照惯用法向上游传递数据。诀窍是我试图将UINavigationController
设置为{{1}},这是弹出窗口的内容视图。听起来太复杂了。也许还有另一个成语?
与此同时,我将给NSNotificationCenter一个旋转。
答案 0 :(得分:1)
你必须潜在的'if'陈述不可能是真的:
if ([segue.identifier isEqualToString:@"popAlarmSegue"])
{
if ([[segue destinationViewController] isKindOfClass:[UINavigationController class]])
{
从代码的外观来看,你应该让控制器钻进PopOver中的内容控制器,而不是来自segue的目标viewController。因为看起来第二个'如果'不是真的。
您需要添加:
if ([[popSegue.popoverController contentViewController] isKindOfClass:[UINavigationController class]])
{
UINavigationController *uNC = (UINavigationController *)popSegue.popoverController;
MyViewController *aVC = (MyViewController *)uNC.topViewController;
aVC.popController = popSegue.popoverController;
aVC.delegate = self;
}