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
中调用此方法
当我们在导航堆栈上推送页面时,我想知道是否可以将最大页面数限制为 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