2

私の問題は、コントローラーとデリゲートがどのように設定されているかを誤解するのではなく、テクニックの1つである可能性があります。つまり、多分私はすべて別の方法でやるべきです...

いずれにせよ、mainViewControllerを使用したスト​​ーリーボードのセットアップがあります。その中にUIButtonは、クリックするとポップオーバーになります。UINavigationControllerポップオーバーのコンテンツビューコントローラーはrootViewController、たとえば、MyViewControllerです。

私はを作成しようとしておりmainViewController、 prepareForSeguedelegateMyViewControllerそうしています:

- (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]ように表示されます。そして、当然、コールバックはで受信されません。nullNSLogMyViewControllerdelegatemainViewController

基本的に、私はiPadでのAppleのカレンダーアプリの動作を模倣しようとしています。

イディオムに従って、委任を使用してデータをアップストリームに渡そうとしています。秘訣は、ポップオーバーのコンテンツビューであるdelegateスルーを設定しようとしていることです。UINavigationController複雑すぎるように聞こえます。多分別のイディオムがありますか?

それまでの間、NSNotificationCenterに旋風を巻き起こします。

4

1 に答える 1

1

真ではない可能性のある「if」ステートメントが必要です。

if ([segue.identifier isEqualToString:@"popAlarmSegue"])
        {
            if ([[segue destinationViewController] isKindOfClass:[UINavigationController class]])
            {

コードの外観から、セグエからの宛先 viewController ではなく、PopOver のコンテンツ コントローラー内にドリルするコントローラーを取得する必要があります。2番目の「if」は真実ではないようです。

以下を追加する必要があります。

            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 に答える