iOS灵活跳转,iOS万能跳转,iOS跳转管理功能的实现

比如客户端有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。现在已经有新的跳转方法了。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值