IOS 中的导航堆栈管理

Navigation Stack Management in IOS

当我们在导航堆栈上推送页面时,我想知道是否可以将最大页面数限制为 10 左右到 r。例如,

如果限制为 4 : A -> B -> C -> D 现在 D 在上面,A 是根。 当我尝试按下 E 时,它应该从堆栈中移除 B。因为我需要 rootVC 留在原地。 结果应该是: A -> C -> D -> E.

此外,我知道如何在堆栈中删除和添加视图控制器,我的问题是如何在应用 运行 时跟踪 navStack。

UINavigationController 有一个名为 viewControllers 的 属性。现在就在你要推送一个新的视图控制器之前,你总是可以检查 self.navigationController.viewControllers.
中存在多少对象 如果它超出了您的限制,那么您可以手动进行导航堆栈管理。

if(self.navigationController.viewControllers.count > limitCount) {
   // Do the stack management manually for nav controller.
}

试试这个代码:

- (void)limitNavigationStack{
    NSMutableArray* controllers= [self.navCtrl.viewControllers mutableCopy];
    if(controllers.count> MAX_CONTROLLERS){
        [controllers removeObjectAtIndex:1]; // Remove first object after root
        [self.navCtrl setViewControllers:controllers];
    }
}

您可以将此代码放入您的 appDelegate 中,并从您的 viewController 的 viewDidLoad 中调用它。

如您所指出的那样,为了使其更通用,您可以继承基本视图控制器并从其 viewDidLoad

中调用此方法