比如客户端有x个页面,每个页面的数据从后台取并且每个页面的json数据key不一样,点击事件也是后台传过来的,跳转的界面都有可能是原生界面、webview、其他类型界面。这样跳来跳去就需要一个类来专门管理跳转。
首先数据key不一致 :
首页的一个按钮对应的Model是, | 第二主页的一个按钮对应的Model是 |
SuKoModel: { NSString *url//跳转地址 NSString *name//按钮名称 还有很多:比如是否有导航条, 导航条的title,是否需要登录。。 } |
MyModel { NSString *detailUrl//跳转地址 NSString *btnName//按钮名称 ...}
|
然后对于跳转链接也有规定,
如果是http:// | 就跳到webView |
如果是native://xxx开头 | 就跳到原生页面 |
,等等 |
按钮的点击事件分别是
- (void)btnClicked:(UIButton *)btnn{
if (btnn.tag == 0) {
//
//每个按钮对应的model
//
SuKoModel *model = [[SuKoModel alloc]init];
model.url = @"http://blog.csdn.net/qq_15509071/article/details/71123323";
model.name = @"";
[JumpManager jumpToControllerWithModel:model OriginalController:self];
}else if(btnn.tag == 1){
SuKoModel *model = [[SuKoModel alloc]init];
model.url = @"native://ZhuanZhangViewController";
model.name = @"";
[JumpManager jumpToControllerWithModel:model OriginalController:self];
}else{
SuKoModel *model = [[SuKoModel alloc]init];
model.url = @"native://HuiKuanViewController";
model.name = @"";
[JumpManager jumpToControllerWithModel:model OriginalController:self];
}
}
- (void)btnClicked:(UIButton *)btnn{
if (btnn.tag == 0) {
MyModel *moel = [[MyModel alloc]init];
moel.detailUrl = @"native://JieKuanViewController";
[JumpManager jumpToControllerWithModel:moel OriginalController:self];
}else if(btnn.tag == 1){
MyModel *moel = [[MyModel alloc]init];
moel.detailUrl = @"http://blog.csdn.net/qq_15509071/article/details/70379690";
[JumpManager jumpToControllerWithModel:moel OriginalController:self];
}else{
}
}
需要把不同的model转换为统一字段的model
+(JumpModel *)changeModel:(id)model{
JumpModel *jumpModel = [[JumpModel alloc]init];
if ([model isKindOfClass:[SuKoModel class]]) {
jumpModel.jumpUrl = ((SuKoModel*)model).url;
}else if([model isKindOfClass:[MyModel class]]){
jumpModel.jumpUrl = ((MyModel*)model).detailUrl;
}
return jumpModel;
}
跳转类方法
+(void)jumpToControllerWithModel:(id)model OriginalController:(id)originalController;
{
JumpModel *jumpModel = [JumpManager changeModel:model];
UIViewController *localOriginalController = originalController;
if ([jumpModel.jumpUrl hasPrefix:@"http:"]) {
WebViewController *controller = [[WebViewController alloc]initWithURL:jumpModel.jumpUrl];
[localOriginalController.navigationController pushViewController:controller animated:YES];
}else if([jumpModel.jumpUrl hasPrefix:@"native:"]){
NSString *controllerString = [jumpModel.jumpUrl stringByReplacingOccurrencesOfString:@"native://" withString:@""];
UIViewController *vc = [[NSClassFromString(controllerString) alloc]init];
[localOriginalController.navigationController pushViewController:vc animated:YES];
}
}
示例工程下载地址: https://github.com/XiaoHeHe1/UniversalJumpDemo/
20180928:补充 实际使用肯定是和路由跳转,登录引导一起使用的,给的也可能只有一个id。现在已经有新的跳转方法了。