将navigationController的rootViewController设置为委托

时间:2012-12-27 07:29:58

标签: objective-c ios delegates uinavigationcontroller

我的问题可能是技术问题,而不是对如何设置控制器和代理的误解。也就是说,也许我应该采用不同的方式......

无论如何,我有一个带有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加载时,NSLogMyViewController中出现delegate。当然,mainViewController中未收到delegate回调。

基本上,我试图在iPad上模仿Apple的日历应用程序的行为。

我正在尝试使用委托按照惯用法向上游传递数据。诀窍是我试图将UINavigationController设置为{{1}},这是弹出窗口的内容视图。听起来太复杂了。也许还有另一个成语?

与此同时,我将给NSNotificationCenter一个旋转。

1 个答案:

答案 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;
            }