2

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

无论如何,我有一个带有 mainViewController 的情节提要设置。在其中有一个UIButton,当单击时,它会跳转到一个弹出窗口。弹出框的内容视图控制器是UINavigationController一个rootViewController例如MyViewController.

我正在尝试制作mainViewControllera delegateofMyViewController并且正在 prepareForSegue 中这样做:

- (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.

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

我正在尝试使用委托按照成语向上游传递数据。诀窍是我试图delegate通过 a设置UINavigationController弹出框的内容视图。听起来太复杂了。也许还有另一个成语?

同时,我要试一试 NSNotificationCenter。

4

1 回答 1

1

您必须潜在的“如果”陈述不正确:

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;
            }
于 2012-12-27T08:15:53.170 回答