1 目前的界面路由所用到的是JLRoutes,但是我们项目中用到的是已经封装并重写过的;用的时候步骤比较方便:
(1) 在对应的界面的load方法里面注册:如下
[JLRoutessn_addRoute:[NSStringstringWithFormat:@"/%@/%@",kUrPatternlType,kTwo]handler:^id(NSDictionary*parameters) {
SecondViewController*lifePayHistoryVC = [[SecondViewControlleralloc]init];
returnlifePayHistoryVC;
//里面的返回要写,而且要初始化,在这里我理解,此block里面的返回就是理由所谓的key对应的value
}];
(2) 在需要界面跳转的地方,利用封装好的方法进行跳转:如下
[RoutespushViewControllerWithRoutesUrl:[NSStringstringWithFormat:@"%@%@/%@",kScheme,kUrPatternlType,@"3"]params:@{@"color":[UIColoryellowColor]}fromNav:self.navigationControllerAnimate:YES];
//注意:对应的url格式要满足,不能乱写,虽然我现在也十分清楚,而且(1)和(2)中的留意,不能一味的照搬
方法对应的实现:
+ (id)routeURL:(NSString*)urlString parmas:(NSDictionary*)params
{
return[JLRoutessn_routeURL:[NSURLURLWithString:urlString]withParameters:params];
}
+ (void)pushViewControllerWithRoutesUrl:(NSString*_Nonnull)url params:(NSDictionary*__nullable)parmas fromNav:(UINavigationController*_Nonnull)fromNav Animate:(BOOL)animate
{
if(url ==nil||url.length==0)
return;
idobject = [selfrouteURL:urlparmas:parmas];
if([objectisKindOfClass:[UIViewControllerclass]])
{
UIViewController*vc = (UIViewController*)[RoutesrouteURL:urlparmas:parmas];
if([NSThreadcurrentThread] != [NSThreadmainThread])
{
dispatch_async(dispatch_get_main_queue(), ^{
if(vc && fromNav)
{
[fromNavpushViewController:vcanimated:animate];
}
});
}
else
{
if(vc && fromNav)
{
[fromNavpushViewController:vcanimated:animate];
}
}
}
}
2 但是 ,在我逐渐理解的过程中发现了一些问题;我今天测试在 Viewcontroller里面这样,push到第五个界面:
因为Viewcontroller是这样来的:
目前未发现什么问题;而此时我想要从第五个界面直接跳转到第二个,于是我这样写
结果方法确实走了,也push了,但是不知道到的是哪一个,反正不是第二个,因为title没有
如果push到了第二个或者其他的,那么title最起码会有,不仅如此,当我连续点击两次back时,就崩溃了
看原因因该是连续push导致的;
自己的分析:push到第五个vc时,view还没展示,就又push到另一个了,因为是在viewdidload里面push的,但是,在Viewcontroller时的viewdidload里面也push了啊,却能够push到第五个。。。这些是为什么呢,不太懂,也不知道崩溃的真正原因;欢迎知道帮助;