怎样多次导航之后返回之前的webview 返回

ios开发navigationController pushViewController 方式跳转 怎么返回到最上层
一直有个很疑惑的问题没有搞清楚
关于ios中 viewcontroller的跳转问题,其中有一种方式是采用navigationController pushViewController 的方法,比如我从主页面跳转到了一级页面,又从一级页面跳转到了二级页面,然后从二级页面跳转到了三级页面,依次类推。,如果一级一级的返回我知道是没有问题的,调用
navigationController popViewControllerAnimated就行了。。但是某些情况下我可能想要马上回到主页面,而不是一级一级的返回(如果有很多层会很累的),。有谁知道怎么快速的返回到某一个指定的页面吗?多谢啊
========最后的答案是===============
返回根页面用 :
[self.navigationController popToRootViewController]
返回指定的某个vc用下面&
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES]; 或 for (UIViewController *controller in self.navigationController.viewControllers) { & & if ([controller isKindOfClass:[你要跳转到的Controller class]]) { & & & & [self.navigationController popToViewController:controller animated:YES]; & & } }
[XXViewController shareInstance]
使用单例,viewControllerA = [[XXViewController alloc] init]; [self.navigationController popToViewController:viewControllerA]; 建议楼主多看看文档吧。
--- 共有 1 条评论 ---
单例写错了,不好意思。vi
[self.navigationController popToRootViewController]
--- 共有 2 条评论 ---
我自己找到了,不过还是要多谢提供思路哈
popToViewController用法
多谢啊,我想再问下,如果我不是想返回最上层的主页面,而是指定的某一层怎么办呢?多谢啊!
[self popToRootViewController]导航控制器的侧滑返回与全屏滑动返回功能 - 简书
导航控制器的侧滑返回与全屏滑动返回功能
侧滑返回做法1:
前提条件:采用系统默认的返回按钮弊端:必须从屏幕左侧的边缘滑动才会实现侧滑返回功能
// 直接调用系统的push方法,无需我们写pop时的代码
[self.navigationController pushViewController:vc1 animated:NO];
101.131.gif
侧滑返回做法2:
前提条件:自定义导航栏返回按钮弊端:必须从屏幕左侧的边缘滑动才会实现侧滑返回功能
代码:自定义导航栏返回按钮
#import "ZBNavController.h"
@interface ZBNavController ()&UINavigationControllerDelegate&
@property (nonatomic ,strong) id PopVCD
@implementation ZBNavController
#warning 程序初始运行先执行pushViewController,方法执行完毕,才真真正正激情根控制器添加到屏幕上。然后加到屏幕时候,立刻调用navigationController,整个过程一气呵成.
- (void)viewDidLoad {
[super viewDidLoad];
// 导航控制器成为自己的代理。【必不可少,已验证】
// 既然任何类的对象都能成为导航控制器的代理,那么自己成为导航控制器的代理,有何不可呢?再者:成为代理,必须得遵守协议,设置代理对象是谁,实现代理方法,这三大核心步骤缺一不可。
self.delegate =
// 将要push到某个控制器的时候调用。参数viewController表示要push的控制器
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.childViewControllers.count != 0) {
NSLog(@"非根控制器");
//加载图片
UIImage *image = [[UIImage imageNamed:@"NavBack"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
// 自定义导航栏的返回按钮
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:0 target:self action:@selector(back)];
//只要重写了pushViewController方法,里面一定要有这行代码,否则就不能实现控制器之间的跳转(入栈和出栈)
[super pushViewController:viewController animated:animated];
- (void)back {
// 返回上一级
[self popViewControllerAnimated:YES];
// 代理方法:导航控制器的View显示完毕时调用。 参数viewController要显示的控制器
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
//判断当前显示的控制器是否为根控制器.
if(self.childViewControllers.count == 1) {
//是根控制器,设回手势代理。否则侧滑没反应,所以也就无法pop到上一级控制器。[已验证]
self.interactivePopGestureRecognizer.delegate = self.PopVCD
101.132.gif
全屏滑动返回
#import "ZBNavController.h"
@interface ZBNavController ()&UIGestureRecognizerDelegate&
@implementation ZBNavController
- (void)viewDidLoad {
[super viewDidLoad];
// 滑动的手势
// 只要我们触发滑动的手势(滑动屏幕),系统就会调用self.interactivePopGestureRecognizer.delegate的handleNavigationTransition:方法,实现全屏返回功能。
// 系统底层帮我们实现了handleNavigationTransition:方法,我们只需要调用即可。
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
// 让当前控制器成为滑动手势的代理
pan.delegate =
[self.view addGestureRecognizer:pan];//给窗口的根控制器的view添加手势
//代理方法。判断是否开始响应手势,返回类型为BOOL.
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {// C
//当前控制器是否为根控制器
if(self.childViewControllers.count == 1) {// 根控制器
return NO;// 拖动屏幕没有反应,即不会发生返回
}else {// 非根控制器
return YES;// 拖动屏幕有反应,即会发生返回
101.130.gif
拓展:自定义导航栏背景颜色,导航栏字体颜色,字体大小
#import "ZBNavController.h"
@interface ZBNavController ()
@implementation ZBNavController
- (void)viewDidLoad {
[super viewDidLoad];
// 某个类或者子类重写了系统的initialize方法,只有在用这个类创建出对象的情况下,才会调用initialize方法,可能调用过多次
+ (void)initialize {
if (self == [ZBNavController class]) {
//获取整个应用程序下所有的导航条.
//UINavigationBar *bar = [UINavigationBar appearance];
//获取指定类下面的导航条
UINavigationBar *bar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[ZBNavController class]]];
//导航条的背景图片
[bar setBackgroundImage:[UIImage imageNamed:@"NavBar64"] forBarMetrics:UIBarMetricsDefault];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 导航栏的字体颜色
//根据可变字典中的key(即NSForegroundColorAttributeName),取出value,即使右边的[UIColor whiteColor]
dict[NSForegroundColorAttributeName] = [UIColor whiteColor];
// 导航栏的字体大小
dict[NSFontAttributeName] = [UIFont boldSystemFontOfSize:20];
[bar setTitleTextAttributes:dict];
101.132.gif
出现的问题1:pop控制器的时候,有竖直的黑影
101.128.gif
解决办法:给黑影所在的控制器设置背景颜色。
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor];
101.129.gif
独立的导航控制器NavigationBar之间切换效果
实现的效果:pop时二级界面的导航栏不会消失隐藏.
系统默认切换效果(共用一个导航条)
101.140.gif
自定义切换效果(两个独立的导航条)
101.134.gif
显示/隐藏navigationBar
在要push的控制器的viewWillAppear方法中设置navigationBar的隐藏或者显示// 在viewWillAppear实现显示/隐藏navigationBar
-(void)viewWillAppear:(BOOL)animated{
self.navigationController.navigationBar.hidden = YES;
101.136.gif
爱钻研,爱总结,爱分享。问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
3个viewcontroller: A, B, C
[A presentViewController: B animated: YES]
[B presentViewController: C animated: YES]
在C中如何直接返回到A,当前我得做法:
[c.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
模拟器上测试,可以直接返回到A,但还是能够看到C返回到B, B再返回到A,只不过B停留在屏幕的时间非常的短。
我尝试过, [c.presentingViewController.presentingViewController dismissViewControllerAnimated:NO completion:nil];
会有闪的突兀感。觉得不好。
有什么方法,可以避免出现以上这种情况,使用户感觉不到B曾经出现过,同时也不会让用户感觉到屏幕顿闪的突兀感?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
presentingViewController连续嵌套不会觉得很奇怪?
我都是用navigation然后push,回到第一个只需要用self.navigationController popToRootViewControllerAnimated:
或者试试[[[[[self parentViewController] parentViewController] parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
请问你是怎么解决的呢?我现在也遇到了这个问题
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App关于重写导航栏返回按钮以及手势返回的诸多问题 - 简书
关于重写导航栏返回按钮以及手势返回的诸多问题
现今APP开发中,定制导航栏的样式应该算是必须的需求了。个人认为系统的导航栏效果不如将导航栏隐藏,重新一个view当做导航栏的效果好看。当然,这种事情见仁见智了。以下内容是笔者在使用系统导航栏时遇到过的问题,诸如返回按钮不美观,侧滑返回失效,导航栏的隐藏显示,以及最严重的一个,手势返回到一半又停留在当前页面,往后push的每一个页面title都变成了之前的那个页面。接着,笔者要郑重推荐一个开源框架--FDFullscreenPopGesture,如丝般顺滑,谁用谁知道。
框架在此不多赘述,下面开始介绍笔者对以上问题的解决方案。笔者的主要思路是将一个由UINavigationController包含的UIViewController(需要UITabBarController同理)设置为window的rootViewController作为首页,首页可以自由定制。接下来的每一个控制器则使用继承自UIViewController的基控制器,如 @interface BasicViewController : UIViewController,这里笔者只给出重写返回按钮的代码。
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpNav];
- (void)setUpNav
UIButton *leftBarBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[leftBarBtn setImage:[UIImage imageNamed:@"返回按钮 copy 2"] forState:UIControlStateNormal];
leftBarBtn.frame = CGRectMake(0, 0, 44, 44);
leftBarBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentL
leftBarBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarBtn];
[leftBarBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
- (void)backAction
[self.navigationController popViewControllerAnimated:YES];
有时候我们设置了图片看不到想要的效果,这是因为系统会对图片进行渲染,这时我们就要设置图片显示的模式为原图,如图
51CE00E2-79-5A0E8AAB7A80.jpeg
再贴一张效果图
26E33F23-CE54-4A8E-9A45-C61FAB5B5E40.png
接下来说一下上面介绍的框架-- FDFullscreenPopGesture的一些用法,它除了添加了全屏手势返回外,还有以下笔者觉得特别好用的属性。
@property (nonatomic, assign) BOOL fd_interactivePopD
@property (nonatomic, assign) BOOL fd_prefersNavigationBarH
前者可以在任意界面上控制侧滑手势
//设为YES取消返回手势
self.fd_interactivePopDisabled = YES;
后者则可以完美控制导航栏的隐藏与否
self.fd_prefersNavigationBarHidden = YES;
这样一来就不用在视图将要出现或消失时写一堆繁琐的代码了

我要回帖

更多关于 recyclerview返回顶部 的文章

 

随机推荐