Ada*_*ite 85 iphone uinavigationcontroller ios
我想弹出导航堆栈上的第三个视图回到第一个视图.
我知道如何一次弹出一个视图:
[self.navigationController popViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
但我怎么一次做两个呢?
谢谢...
Mee*_*eet 129
您也可以尝试在导航控制器堆栈之间跳转
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
for (UIViewController *aViewController in allViewControllers) {
if ([aViewController isKindOfClass:[RequiredViewController class]]) {
[self.navigationController popToViewController:aViewController animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
bud*_*ino 60
以下是两个UINavigationController可以解决您问题的扩展.我建议使用弹出UIViewController特定类的第一个:
extension UINavigationController {
func popToViewController(ofClass: AnyClass, animated: Bool = true) {
if let vc = viewControllers.filter({$0.isKind(of: ofClass)}).last {
popToViewController(vc, animated: animated)
}
}
func popViewControllers(viewsToPop: Int, animated: Bool = true) {
if viewControllers.count > viewsToPop {
let vc = viewControllers[viewControllers.count - viewsToPop - 1]
popToViewController(vc, animated: animated)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
// pop to SomeViewController class
navigationController?.popToViewController(ofClass: SomeViewController.self)
// pop 2 view controllers
navigationController?.popViewControllers(viewsToPop: 2)
Run Code Online (Sandbox Code Playgroud)
cho*_*own 43
您可以使用以下命令弹出"root"(第一个)视图控制器popToRootViewControllerAnimated:
[self.navigationController popToRootViewControllerAnimated:YES];
// If you want to know what view controllers were popd:
// NSArray *popdViewControllers = [self.navigationController popToRootViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
弹出除根视图控制器之外的堆栈上的所有视图控制器并更新显示.
返回值
从堆栈弹出的视图控制器数组.
Zar*_*aki 29
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
Run Code Online (Sandbox Code Playgroud)
objectAtIndex:1 - >您可以传递要弹出的索引
lub*_*lis 18
Swift 2 - xCode 7.3
这可能是弹出UIViewControllers的一个非常有用的扩展:
extension UINavigationController {
func popToViewControllerOfType(classForCoder: AnyClass) {
for controller in viewControllers {
if controller.classForCoder == classForCoder {
popToViewController(controller, animated: true)
break
}
}
}
func popViewControllers(controllersToPop: Int, animated: Bool) {
if viewControllers.count > controllersToPop {
popToViewController(viewControllers[viewControllers.count - (controllersToPop + 1)], animated: animated)
} else {
print("Trying to pop \(controllersToPop) view controllers but navigation controller contains only \(viewControllers.count) controllers in stack")
}
}
}
Run Code Online (Sandbox Code Playgroud)
Tie*_*eme 15
如果你只是想一次弹出2,因为你的rootViewController是"更深",那么你可以考虑在UIviewController中添加一个类别,例如:
#import <UIKit/UIKit.h>
@interface UINavigationController (popTwice)
- (void) popTwoViewControllersAnimated:(BOOL)animated;
@end
Run Code Online (Sandbox Code Playgroud)
#import "UINavigationController+popTwice.h"
@implementation UINavigationController (popTwice)
- (void) popTwoViewControllersAnimated:(BOOL)animated{
[self popViewControllerAnimated:NO];
[self popViewControllerAnimated:animated];
}
@end
Run Code Online (Sandbox Code Playgroud)
#import "UINavigationController+popTwice.h"在实现中的某处导入类别,并使用以下代码行一次弹出2个控制器:
[self.navigationController popTwoViewControllersAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
那不是很好吗?:)
你也可以尝试这个: -
[self.navigationController popToViewController:yourViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
//viewIndex = 1;
//viewIndex = 2;
//viewIndex = 3;
// **[viewControllers objectAtIndex: *put here your viewindex number*]
NSArray *viewControllers = [self.navigationController viewControllers];
[self.navigationController popToViewController:[viewControllers objectAtIndex:viewIndex] animated:NO];
Run Code Online (Sandbox Code Playgroud)
斯威夫特4:
func popViewControllerss(popViews: Int, animated: Bool = true) {
if self.navigationController!.viewControllers.count > popViews
{
let vc = self.navigationController!.viewControllers[self.navigationController!.viewControllers.count - popViews - 1]
self.navigationController?.popToViewController(vc, animated: animated)
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用此方法
self.popViewControllerss(popViews: 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55670 次 |
| 最近记录: |