0

我正在使用我正在开发的应用程序遇到了一些难题,我只是不知道如何跳转到导航控制器堆栈中的特定视图控制器。

因此,概述应用程序的结构。我正在使用 Storyboards 和 Segues 在视图之间导航。

主屏幕- 这会从服务器中提取 4 个最新作业更新的列表并将它们显示在表格中,并有一个按钮以模态方式显示 UINavigationController。

UINavigationController

作业列表- 从服务器中提取所有当前作业的列表并将它们显示在表格中。在选择一个单元格时,jobid在 Job details during 中设置prepareForSegue:,然后将其推入堆栈。

作业详细信息- 提取作业的所有详细信息(描述、照片等)并显示它们。

因此,通过主屏幕按钮 > 作业列表 > 作业详细信息导航作业不是问题,并且可以完美运行。

我想不通的是如何在主屏幕上选择最新的工作更新之一时跳转到特定工作的详细信息。

我希望我已经解释得够多了。任何帮助将不胜感激。

谢谢。

4

2 回答 2

1

在 JobListViewController 中创建几个属性:

@property (assign) int initialisedWithSelectedJob;
@property (assign) int selectedJob;

当您从主屏幕模态显示时,如果选择了一个作业,则将其传递给 JobListViewController 中的 initialisedWithSelectedJob:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  {

   [(JobListViewController*)[segue.destinationViewController topViewController] 
                                     setInitialisedWithSelectedJob:selectedJob];

}

然后在您的 JobListViewController 的 viewDidLoad 中:

if (self.initialisedWithSelectedJob)
    {   
        self.selectedJob = initialisedWithSelectedJob;
        [self performSegueWithIdentifier:@"onToJobDetails" sender:self];
        self.initialisedWithSelectedJob == 0;
    }

您必须重置 initialisedWithSelectedJob 以便您可以从 JobDetails 屏幕返回此处而不会再次被直接弹回。)。

在 JobListViewController 的 prepareForSegue 中,您可以像以前一样传递 selectedJob id。

更新

这样,您将从 Job Detail 返回到 JobListViewController。无论您在主屏幕或列表屏幕上选择作业,从主屏幕 -> 作业列表屏幕 -> 作业详细屏幕的移动都将保持一致。

如果您按照0x7fffffff的回答,那么无论您是从主屏幕还是作业列表屏幕中选择作业,导航都会大不相同。

我想知道你是否应该重新考虑一下你的设计——在主屏幕和 JobListViewController 中都有你的工作列表可能有点多余?

于 2013-01-17T13:10:55.247 回答
0

在界面生成器中,您可以为要推送到的视图控制器分配一个 ID:

在此处输入图像描述

然后,当用户选择“最新作业”时,您可以使用以下内容推送到具有该标识符的视图控制器。

UIViewController *detailController = [[self storyboard] instantiateViewControllerWithIdentifier:@"myID"];
[[self navigationController] pushViewController:detailController animated:YES];

当然,为了做到这一点,您还必须将主视图控制器嵌入到导航控制器中。

于 2013-01-17T12:53:27.677 回答