跳转到UINavigationController中的特定点

时间:2013-01-17 12:26:20

标签: iphone ios objective-c xcode uinavigationcontroller

我遇到了一个我正在研究的应用程序的砖墙,我无法理解如何跳转到导航控制器堆栈中的特定视图控制器。

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

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

的UINavigationController

作业列表 - 从服务器中提取所有当前作业的列表,并将其显示在表格中。在选择单元格时,在jobid期间在作业详细信息中设置prepareForSegue:,然后将其推入堆栈。

作业详细信息 - 提取作业的所有详细信息(说明,照片等)并显示它们。

通过主屏幕按钮导航作业>工作清单>工作细节不是问题,而且运作完美。

我无法弄清楚当在主屏幕上选择一个最新的职位更新时如何跳转到特定职位的详细信息。

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

感谢。

2 个答案:

答案 0 :(得分: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中列出您的工作列表可能有点多余?

答案 1 :(得分:0)

在界面构建器中,您可以为要推送到的视图控制器分配ID:

enter image description here

然后,当用户选择"最新作业"您可以使用以下命令将该标识符推送到视图控制器。

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

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