我的问题可能是技术之一,而不是误解控制器和代表如何设置。也就是说,也许我应该做所有不同的方式......设置navigationController的rootViewController作为委托
无论如何,我有一个故事板设置与mainViewController。其中有一个UIButton
,当点击时,它会延续到popover。 popover的内容视图控制器是UINavigationController
,他的rootViewController
是MyViewController
。
我试图让mainViewController
的MyViewController
一个delegate
和我在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]
是在NSLog
时MyViewController
负载上来为null
。当然,在mainViewController
中没有收到delegate
回调。
本质上,我试图模仿苹果日历应用程序在iPad上的行为。
我试图使用代表传递数据上游按成语。诀窍是我试图通过作为popover的内容视图的UINavigationController
来设置delegate
。听起来太复杂了。也许还有另一个成语?
与此同时,我要给NSNotificationCenter一个旋风。
奇怪的是,当我得到'null'这里:'[self.delegate类]'在MyViewController的viewDidLoad回调实际上得到触发。奇怪。 –
我刚刚在MyViewController中创建了一个测试变量:'@property(nonatomic,strong)NSString * testString;'并试图在segue中设置它并在MyViewController的视图中加载打印出来。没有工作。我的猜测是MyViewController在segue时并不存在 - 即唯一存在的UINavigationController(即目标视图控制器)。嗯。 –
亲切善良 - 如果我在调用委托协议之前将[self.delegate类](和testString)的NSLog打印输出从viewDidLoad移动到正确之前,那么它们的确可以正确打印出来,表明委托(和testString)确实在prepareForSegue中。有任何想法吗?在_after_ viewDidLoad之前@properties没有设置? –