簡體   English   中英

iOS Storyboard-導航控制器不起作用

[英]iOS Storyboard - Navigation Controller Not Working

我在使用情節提要的iOS項目中遇到導航控制器的問題。

該項目的主要部分是UITabBar。 當應用首次加載時,將顯示RegisterViewController屏幕:

注冊視圖控制器

當用戶點擊“注冊”按鈕時,發出HTTP POST請求,然后在接收到響應(JSON對象)后,使用以下方法顯示QuestionnaireViewController屏幕:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

QuestionnaireViewController *questionnaireViewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"QuestionnaireView"];
[questionnaireViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[questionnaireViewController setQuestionsAndAnswers:_questionsAndAnswers];

[self presentViewController:questionnaireViewController animated:NO completion:nil];

問卷視圖控制器

當用戶點擊QuestionnaireViewController中的單元格時,將發送一條消息以准備prepareForSegue:sender:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UINavigationController *navigationController = segue.destinationViewController;

    AnswersViewController *answersViewController = [[navigationController viewControllers] objectAtIndex:0];

    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
    NSArray *answers = [[_questionsAndAnswers objectAtIndex:indexPath.row] objectForKey:@"answers"];

    [answersViewController setAnswers:answers];
}

此時,應用程序崩潰,並顯示以下錯誤:-[AnswersViewController viewControllers]:無法識別的選擇器已發送到實例。

以下是我的故事板的更全面概述,這可能有助於您了解我哪里出錯了:

故事板

對於如何解決此問題,我感到很困惑,並希望有人能夠提供幫助。

謝謝,尼克

首先,您應該提供導航控制器,而不是其根視圖控制器。 然后,當您想用一些數據填充根視圖控制器時,需要將其引用為導航控制器的根視圖控制器:

UINavigationcontroller *questionnaireNavController = [self.storyboard instantiateViewControllerWithIdentifier:@"QuestionnaireNavigationController"];
[questionnaireNavController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
QuestionnaireViewController *qvc = (QuestionnaireViewController *)[questionnaireNavController topViewController];
[qvc setQuestionsAndAnswers:_questionsAndAnswers];

[self presentViewController:questionnaireNavController animated:NO completion:nil];

其次,在prepareForSegue:sender中:您根本不需要引用導航控制器:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    AnswersViewController *answersVC = segue.destinationViewController;
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
    NSArray *answers = [[_questionsAndAnswers objectAtIndex:indexPath.row] objectForKey:@"answers"];

    [answersVC setAnswers:answers];
}

您沒有正確獲取navigationController。 取而代之的segue.destinationViewControlle R,使用self.navigationController

通過調用segue.destinationViewController,您將獲得指向要搜索的VC的指針( AnswersViewController ),由於它不是UINavigationController,它不了解消息viewControllers

另外AnswersViewController是objectAtIndex:1我相信,不過請檢查一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM