有啥方法可以导航到 UInavigationcontroller 堆栈中间的 Viewcontroller

Posted

技术标签:

【中文标题】有啥方法可以导航到 UInavigationcontroller 堆栈中间的 Viewcontroller【英文标题】:Is there any way that I can navigate to Viewcontroller which is middle of the UInavigationcontroller stack有什么方法可以导航到 UInavigationcontroller 堆栈中间的 Viewcontroller 【发布时间】:2016-12-08 08:21:38 【问题描述】:

我有 Collection View Controller PatientList -> 在选择单元格时导航到 PatientdetailView -> 在单击按钮时导航到 startDignosisView。这是导航控制器堆栈。现在从患者列表中,我有按钮 “添加” 导航到 AddpatientView,我必须从那里导航到 StartdignosisView 而不会干扰导航堆栈。我该怎么做?

【问题讨论】:

Arpana 你在用故事板吗? 问得更清楚,你的问题不能100%理解! 您能详细分享您的问题吗?您的问题无法 100% 理解 【参考方案1】:
for (UIViewController *controller in self.navigationController.viewControllers)

    if ([controller isKindOfClass:[NeededViewController class]])
    
        [self.navigationController popToViewController:controller
                                          animated:YES];
        break;
    

【讨论】:

我的导航堆栈是 -PatientListView->detailView->StartDiagosisview.. 患者列表视图有一个名为 Add 的按钮,该按钮导航到 AddPatientView。现在从 AddpatientView 有一个按钮可以将我导航到 StartDiagnosisView。在 AddPatient 我使用上面的代码为 (PatientListCardView *controller in self.navigationController.viewControllers) if ([controller isKindOfClass:[self class]]) [self.navigationController popToViewController:controller animated:YES]; break; 我做错了吗 @ArpanaSakpal 我只能帮助您提供解决方案...无法代表您编写代码.. 抱歉【参考方案2】:
if let viewControllers = self.navigationController?.viewControllers 
    var newStack: [UIViewController] = []
    for viewController in viewControllers 
        newStack.append(viewController)
        if viewController is StartdignosisView 
            break
        
    
    self.navigationController?.viewControllers = newStack

【讨论】:

目标C请 如果你愿意,你应该在你的问题中标记objective C!!顺便说一句,我已经编辑了你的问题!【参考方案3】:

试试这样:

   some *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"some identifier you add to a vc in the storyboard"];
   [self.navigationController pushViewController:vc animated:YES];

只需将标识符设置为该视图控制器的情节提要。

【讨论】:

【参考方案4】:

如果您不使用情节提要,请按照以下步骤操作:

查看是否添加患者,然后直接导航到 StartDignosisVC,然后您将无法弹出到 PatientDetailVC

你可以从这两个中选择任何一个:

第一:

尝试展示您的 AddPatientVC,添加新的然后将其关闭并按照您的旧堆栈路径。

第二: 一个 ADD 按钮操作像这样实例化您的 AddpatientView:

AddPatientVC *obj = [storyboard instantiateViewControllerWithIdentifier:@"AddPatientVC"];

同样导航到 StartdignosisView 并设置一个您来自 AddPatientVC 的标志:

 StartDignosisVC *obj = [storyboard instantiateViewControllerWithIdentifier:@"StartDignosisVC"];
    obj.isFromAddPatientView = true

当您从 StartDignosisVC 按返回按钮时,检查您是否来自 AddPatientVC 以将其直接弹出到患者列表。

如果您使用的是故事板,那么您可以执行以下操作,请参见随附的屏幕截图:

【讨论】:

感谢您的回答 Dheeraj,但我没有使用 Storyboard【参考方案5】:

感谢 Mayank 的回答:以下代码适用于我的情况。 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];

【讨论】:

以上是关于有啥方法可以导航到 UInavigationcontroller 堆栈中间的 Viewcontroller的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:在调试时,有啥方法可以阻止它在最前面的窗口中打开导航器?

有啥方法可以滚动到 Flutter 列表视图中的某个位置

有啥办法可以做到这一点?相对路径使用

有啥方法可以禁用 CSS 滚动捕捉点?

找不到导航控制器来导航另一个视图控制器

警告:尝试在已呈现 <RCTModalHostViewController> 的 <RNNsideMenuController> 上呈现 <UINavigationCon