私の問題は、コントローラーとデリゲートがどのように設定されているかを誤解するのではなく、テクニックの1つである可能性があります。つまり、多分私はすべて別の方法でやるべきです...
いずれにせよ、mainViewControllerを使用したストーリーボードのセットアップがあります。その中にUIButtonは、クリックするとポップオーバーになります。UINavigationControllerポップオーバーのコンテンツビューコントローラーはrootViewController、たとえば、MyViewControllerです。
私はを作成しようとしておりmainViewController、 prepareForSeguedelegateで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]ように表示されます。そして、当然、コールバックはで受信されません。nullNSLogMyViewControllerdelegatemainViewController
基本的に、私はiPadでのAppleのカレンダーアプリの動作を模倣しようとしています。
イディオムに従って、委任を使用してデータをアップストリームに渡そうとしています。秘訣は、ポップオーバーのコンテンツビューであるdelegateスルーを設定しようとしていることです。UINavigationController複雑すぎるように聞こえます。多分別のイディオムがありますか?
それまでの間、NSNotificationCenterに旋風を巻き起こします。