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