从AppDelegate模态或者push到某个页面


模态到指定页面 

FirstViewController


    FirstViewController *ffVC =[[FirstViewControlleralloc]init];

    UINavigationController *pushNav = [[UINavigationControlleralloc]initWithRootViewController:ffVC];

    [self.window.rootViewControllerpresentViewController:pushNavanimated:YEScompletion:nil];


push 到 FirstViewController


 //push

    

    UINavigationController *_nav = (UINavigationController*) (self.window.rootViewController);

    FirstViewController *_vc = [[FirstViewControlleralloc]init];

    [_nav pushViewController:_vcanimated:YES];


通知时要根据字典返回字段判断跳转到指定的控制器 

 FirstViewController 

 

判断页面是push还是模态进入当前页面

- (void)enterType{

    NSArray *viewcontrollers=self.navigationController.viewControllers;

    if (viewcontrollers.count>1) {

        if ([viewcontrollersobjectAtIndex:viewcontrollers.count-1]==self) {

            //push方式

            NSLog(@"ppppppuuuusssshh");

        }

    }

    else{

        //模态方式

        

        NSLog(@"mmmmmmmdddddaaaa--模态");

    }


}


最近看到有利用runtime 万能跳转:

#import "AppDelegate.h"

#import <objc/runtime.h> //引入runtime


//加载完成调用

- (void)test

{

    // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数

    NSDictionary *userInfo =@{

                               @"class":@"HSFeedsViewController",

                               @"property":@{

                                       @"ID":@"123",

                                       @"type":@"12"

                                       }

                               };

    

    [selfpush:userInfo];

}


#pragma mark 接收推送消息

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

    // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数

//NSDictionary *userInfo = @{

//                           @"class": @"HSFeedsViewController",

//                           @"property": @{

//                                        @"ID": @"123",

//                                        @"type": @"12"

//                                   }

//                           };

    

    [selfpush:userInfo];

}


/**

 *  跳转界面

 */

- (void)push:(NSDictionary *)params

{

    // 类名

    NSString *class =[NSStringstringWithFormat:@"%@", params[@"class"]];

    constchar *className = [classcStringUsingEncoding:NSASCIIStringEncoding];

    

    // 从一个字串返回一个类

    Class newClass =objc_getClass(className);

    if (!newClass)

    {

        // 创建一个类

        Class superClass = [NSObjectclass];

        newClass = objc_allocateClassPair(superClass, className,0);

        // 注册你创建的这个类

        objc_registerClassPair(newClass);

    }

    // 创建对象

    id instance = [[newClassalloc] init];

    

    NSDictionary *propertys = params[@"property"];

    [propertys enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {

        // 检测这个对象是否存在该属性

        if ([selfcheckIsExistPropertyWithInstance:instanceverifyPropertyName:key]) {

            // 利用kvc赋值

            [instance setValue:objforKey:key];

        }

    }];


    

    // 获取导航控制器

    UITabBarController *tabVC = (UITabBarController *)self.window.rootViewController;

    UINavigationController *pushClassStance = (UINavigationController *)tabVC.viewControllers[tabVC.selectedIndex];

    

    // 跳转到对应的控制器

    [pushClassStance pushViewController:instanceanimated:YES];

}


/**

 *  检测对象是否存在该属性

 */

- (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName

{

    unsignedint outCount, i;

    

    // 获取对象里的属性列表

    objc_property_t * properties =class_copyPropertyList([instance

                                                           class], &outCount);

    

    for (i =0; i < outCount; i++) {

        objc_property_t property =properties[i];

        //  属性名转成字符串

        NSString *propertyName = [[NSStringalloc] initWithCString:property_getName(property)encoding:NSUTF8StringEncoding];

        // 判断该属性是否存在

        if ([propertyNameisEqualToString:verifyPropertyName]) {

            free(properties);

            returnYES;

        }

    }

    free(properties);

    

    returnNO;

}



http://www.jianshu.com/p/8b3a9155468d



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值