【问题标题】:Sending objects between viewcontrollers that are bundled with navigationcontroller在与导航控制器捆绑的视图控制器之间发送对象
【发布时间】:2013-09-11 13:41:38
【问题描述】:

我有两个与导航控制器捆绑在一起的视图控制器。我试图将一个对象从一个视图控制器发送到另一个。我在表格的 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 时,一切正常,但我丢失了标题上的导航栏,这对我的项目非常重要(这就是我决定将视图控制器与导航控制器捆绑在一起的原因)。

【问题讨论】:

    标签: iphone ios xcode


    【解决方案1】:

    如果“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];
        }];
    

    【讨论】:

    • 好的,我了解问题和您的解决方案,我认为它有效,但我不确定如何在我的代码中实现它。如果您能在这里帮助我,我将不胜感激。
    • 我试过了,它将对象发送到另一个视图,但我仍然丢失了标题处的导航栏。
    • @RashidAsgari,您将不得不更全面地描述您的设置。我不知道slidingViewController 是什么,以及它适合层次结构的位置。同样 self.slidingViewController.topViewController 是 serviceTable 似乎是错误的,因为我们刚刚说了几行,那是 serviceTableNav 的顶视图控制器。
    • 我终于做对了!它应该是 self.slidingViewController.topViewController = serviceTableNav;谢谢@rdelmar,你是救生员:)
    猜你喜欢
    • 2014-04-10
    • 2014-10-10
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多