0

我有两个与导航控制器捆绑在一起的视图控制器。我试图将一个对象从一个视图控制器发送到另一个。我在表的 didselectrow 中使用下面的代码:

UIViewController *serviceTable = [self.storyboard instantiateViewControllerWithIdentifier:@"navigationServiceNews"];

    ((TableServiceNews*)serviceTable).service_ID = [ServiceID objectAtIndex:indexPath.row];

    [self.slidingViewController anchorTopViewOffScreenTo:ECRight
        animations:nil onComplete:^{
        CGRect frame = self.slidingViewController.topViewController.view.frame;
        self.slidingViewController.topViewController = serviceTable;
        self.slidingViewController.topViewController.view.frame = frame;
        [self.slidingViewController resetTopView];
    }];

我使用的标识符(navigationServiceNews)指向与目标视图控制器捆绑的导航控制器。

使用此标识符时,应用程序崩溃,因为很明显,instantiateViewControllerWithIdentifier 返回的是一个 veiwcontroller 而不是一个导航控制器。

当我将标识符更改为目标视图控制器的 ID 时,一切正常,但我丢失了标题上的导航栏,这对我的项目非常重要(这就是我决定将视图控制器与导航控制器捆绑在一起的原因)。

4

1 回答 1

0

如果“navigationServiceNews”是您分配给导航控制器的标识符,那么 instantiateViewControllerWithIdentifier: 将实例化导航控制器而不是 UIViewController,所以这不是您的问题。你的问题在下一行——我假设 serviceID 是 TableServiceNews 上的一个属性,而不是导航控制器,所以你需要使用 topViewController 来获取该控制器。

    UINavigationController *serviceTableNav = [self.storyboard instantiateViewControllerWithIdentifier:@"navigationServiceNews"];
    TableServiceNews *serviceTable = serviceTableNav.topViewController;

    serviceTable.service_ID = [ServiceID objectAtIndex:indexPath.row];

    [self.slidingViewController anchorTopViewOffScreenTo:ECRight
            animations:nil onComplete:^{
            CGRect frame = self.slidingViewController.topViewController.view.frame;
            self.slidingViewController.topViewController = serviceTable;
            self.slidingViewController.topViewController.view.frame = frame;
            [self.slidingViewController resetTopView];
    }];
于 2013-09-11T15:30:29.543 回答