我的問題可能是技術之一,而不是誤解控制器和代表如何設置。也就是說,也許我應該做所有不同的方式......設置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沒有設置? –