- 浏览: 41087 次
文章分类
最新评论
-
peng13123:
...
Hibernate4+Spring3+SpringMVC -
peng13123:
好吧,呵呵zxxwlj 写道 翻/墙?违法。。。
我想问为啥我goagent的文章被删除了 -
zxxwlj:
翻/墙?违法。。。
我想问为啥我goagent的文章被删除了
在开发项目中,会有这样变态的需求:
推送:根据服务端推送过来的数据规则,跳转到对应的控制器
feeds列表:不同类似的cell,可能跳转不同的控制器(嘘!产品经理是这样要求:我也不确定会跳转哪个界面哦,可能是这个又可能是那个,能给我做灵活吗?根据后台返回规则任意跳转?)
思考:wocao!这变态的需求,要拒绝他吗?
switch判断呗,考虑所有跳转的因素?这不得写死我...
我是这么个实现的(runtime是个好东西)
利用runtime动态生成对象、属性、方法这特性,我们可以先跟服务端商量好,定义跳转规则,比如要跳转到A控制器,需要传属性id、type,那么服务端返回字典给我,里面有控制器名,两个属性名跟属性值,客户端就可以根据控制器名生成对象,再用kvc给对象赋值,这样就搞定了 ---O(∩_∩)O哈哈哈
比如:根据推送规则跳转对应界面HSFeedsViewController
HSFeedsViewController.h:
进入该界面需要传的属性
推送:根据服务端推送过来的数据规则,跳转到对应的控制器
feeds列表:不同类似的cell,可能跳转不同的控制器(嘘!产品经理是这样要求:我也不确定会跳转哪个界面哦,可能是这个又可能是那个,能给我做灵活吗?根据后台返回规则任意跳转?)
思考:wocao!这变态的需求,要拒绝他吗?
switch判断呗,考虑所有跳转的因素?这不得写死我...
switch () { case : break; default: break; }
我是这么个实现的(runtime是个好东西)
利用runtime动态生成对象、属性、方法这特性,我们可以先跟服务端商量好,定义跳转规则,比如要跳转到A控制器,需要传属性id、type,那么服务端返回字典给我,里面有控制器名,两个属性名跟属性值,客户端就可以根据控制器名生成对象,再用kvc给对象赋值,这样就搞定了 ---O(∩_∩)O哈哈哈
比如:根据推送规则跳转对应界面HSFeedsViewController
HSFeedsViewController.h:
进入该界面需要传的属性
@interface HSFeedsViewController : UIViewController // 注:根据下面的两个属性,可以从服务器获取对应的频道列表数据 /** 频道ID */ @property (nonatomic, copy) NSString *ID; /** 频道type */ @property (nonatomic, copy) NSString *type; @end
AppDelegate.m: //推送过来的消息规则 // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数 NSDictionary *userInfo = @{ @"class": @"HSFeedsViewController", @"property": @{ @"ID": @"123", @"type": @"12" } }; //接收推送消息 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [self push:userInfo]; } //跳转界面 - (void)push:(NSDictionary *)params { // 类名 NSString *class =[NSString stringWithFormat:@"%@", params[@"class"]]; const char *className = [class cStringUsingEncoding:NSASCIIStringEncoding]; // 从一个字串返回一个类 Class newClass = objc_getClass(className); if (!newClass) { // 创建一个类 Class superClass = [NSObject class]; newClass = objc_allocateClassPair(superClass, className, 0); // 注册你创建的这个类 objc_registerClassPair(newClass); } // 创建对象 id instance = [[newClass alloc] init]; // 对该对象赋值属性 NSDictionary * propertys = params[@"property"]; [propertys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { // 检测这个对象是否存在该属性 if ([self checkIsExistPropertyWithInstance:instance verifyPropertyName:key]) { // 利用kvc赋值 [instance setValue:obj forKey:key]; } }]; // 获取导航控制器 UITabBarController *tabVC = (UITabBarController *)self.window.rootViewController; UINavigationController *pushClassStance = (UINavigationController *)tabVC.viewControllers[tabVC.selectedIndex]; // 跳转到对应的控制器 [pushClassStance pushViewController:instance animated:YES]; } //检测对象是否存在该属性 - (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName { unsigned int 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 = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; // 判断该属性是否存在 if ([propertyName isEqualToString:verifyPropertyName]) { free(properties); return YES; } } free(properties); return NO; }
发表评论
-
Xcode7 ios9不能用http请求
2015-09-17 18:49 681Xcode7 使用NSURLSession发送HTTP请求的问 ... -
iOS UITableViewCell 中 调整imageView 的图片大小
2015-08-26 16:10 1378//设置图片 [cell.imageView setImage ... -
周堋斐:梦想的开发者
2015-04-13 17:56 012年的深圳软件园也是各种。呵呵哒 -
IOS判断app在appstore是否有可用的更新
2015-03-13 10:25 540iTunes可以提供app的版本信息,主要通过appid获取, ... -
uitableview分割线 左右边距相同
2015-01-21 15:59 2537_myTableView1.separatorInset= ... -
在uiimageview中设置网络图片等比例大小
2014-12-30 15:38 724NSData *data=[NSData dataWith ... -
[转]iOS UISCrollView循环滚动 实现
2014-12-30 13:42 682google了半天发现很多人竟然搞不定,甚至还有人用数组左移右 ... -
push的时候,感觉上一个页面的视图还有残留,然后停顿了一下,才消失的解决
2014-12-10 20:04 1840这个,以前遇到过,后来不知怎么弄好了,现在就是你如果改下pus ... -
view整体上移
2014-11-26 16:06 885如果你准备将你的老的 iOS 6 app 迁移到 iOS 7/ ... -
广告轮播
2014-11-17 20:05 474h <UIAlertViewDelegate,UIScr ... -
设置全局navigation barbuttonitem
2014-11-17 19:58 746#pragma mark 设置全局navigation bar ... -
nsdate 前一天,后一天
2014-11-17 19:57 1162h { NSDate *choseDate;//显示日 ... -
sdwebimage ios8 报错
2014-11-02 00:22 679报错:Use of undeclared identifier ... -
之前有人整理过Git上好用的iOS库,我搬运一下
2014-10-31 14:56 315之前有人整理过Git上好用的iOS库,我搬运一下: http: ... -
ios中添加和移除view
2014-08-14 11:36 827la = [[UILabel alloc]init]; ... -
UITextField只能输入数字且小数点后保留2位
2014-07-18 17:17 573#pragma mark UITextFieldDeleg ... -
NSTimer倒计时
2014-07-17 10:56 529// [NSTimer scheduledTimerWithT ... -
转】视图切换总结
2014-06-04 12:06 5481、利用ModalViewController切换View ... -
ios 判断网络连接以及获取路由信息
2014-05-29 11:53 1675首先 引入 Reachability.h 和Reachabil ... -
UINavigationController如何连续返回两级/回到第一级
2014-01-18 09:44 816//连续返回两级 int index=[[self.navig ...
相关推荐
在iOS开发中,实现“跳转管理”是一个关键任务,特别是在设计复杂的应用程序流程时。本文将基于给定的博客链接...通过学习和实践,开发者可以构建出一个高效且易用的万能跳转框架,服务于自己的iOS应用。
详细的IOS界面跳转及传值,包含toolbar实现多个view之间的跳转以及界面内按钮实现跳转,用到单例模式: 在第一个界面登陆,在第二个界面显示名字,并且根据不同的名字显示不同的图片 (最好不要加toolbar) 博客参考...
这篇关于iOS Runtime的文章主要面向移动开发者,尤其是那些希望通过深入理解Runtime来提升iOS应用开发技能的人员。 首先,iOS Runtime允许我们进行消息传递(Message Dispatching),这是Objective-C编程中的关键...
本文将详细讲解“ios页面跳转传值”这一主题,以及如何使用`delegate`来隐藏键盘。 首先,让我们理解页面跳转的概念。在iOS应用中,我们通常使用`UIStoryboardSegue`或`UINavigationController`进行页面之间的切换...
在iOS开发中,Runtime是一种强大的工具,它允许我们在运行时检查和修改应用程序的行为。Runtime,全称为Objective-C Runtime,是Objective-C语言的核心组成部分,它在程序执行过程中提供了对类、对象、方法等元数据...
本文将深入探讨“ios runtime动态添加方法demo”这一主题,通过一个简单的示例项目RuntimeDemo来阐述Runtime的核心概念和应用。 Runtime,全称为Objective-C Runtime,是Apple的Objective-C编程语言的一个关键组成...
在iOS应用开发中,页面跳转是用户交互的重要组成部分,它涉及到用户界面的导航和流程控制。本示例主要探讨了三种iOS页面跳转的方法:通过Storyboard进行导航、使用NavigationController以及视图转换(ViewTransition...
本教程将通过一个界面跳转的Demo,深入讲解如何使用协议进行界面间的交互。我们将主要关注以下几个方面: 1. **协议的概念与声明** 协议在Objective-C和Swift中都是定义行为的标准,它定义了一组方法和属性,但不...
在iOS开发中,Runtime是一个非常重要的概念,它是一种运行时环境,允许我们在程序运行时动态地获取和修改对象的信息,包括方法、属性和关联。Runtime是Objective-C和Swift中的一个核心特性,它使得编程变得更加灵活...
本篇文章将详细探讨iOS 5的拨号界面及其特点,并提供如何将iOS 6的拨号界面恢复为iOS 5样式的方法。 iOS 5的拨号界面是苹果在2011年推出的一个重要更新,它引入了许多新的功能和改进。这个界面以其简洁、直观的设计...
Objective-C的runtime是一个强大的底层API,它允许在运行时动态地获取类的信息、修改方法、添加属性等。在数据库操作中,runtime可以用于自动管理对象与数据库之间的映射,减轻手动写SQL语句的负担。例如,我们可以...
iOS中的Runtime是一个强大的工具,它是Objective-C运行时系统的简称,主要负责在程序运行时处理对象、类、协议等的各种操作。Objective-C与静态类型语言如C不同,它采用动态调用过程,即在编译时不会确定具体调用...
iOSAPP跳转微信小程序的Demo,仅用于演示作用,集成细节在博客中有详细介绍,可移驾这里:https://blog.csdn.net/fuzheng0301/article/details/100036332
最近一个项目需要iOS和安卓使用一个二维码,让扫描的机器自己识别操作系统实现跳转到相应的下载链接。比如iPhone用微信进行扫描就让他跳转appStore的下载页面,安卓机器使用微信扫描就直接跳浏览器下载。但是这...
iOS页面跳转的各式动画,比较全面; UIView animateWithDuration:DURATION animations:^{ [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition:transition forView:view ...
本文将详细介绍五种在iOS中实现界面跳转的方法,并分析它们的优缺点。 1. **Storyboard Segues** 故事板(Storyboard)的Segues是iOS开发中最直观的方式。通过在Interface Builder中从一个视图控制器(如...
在iOS开发中,页面跳转是应用程序中不可或缺的一部分,它允许用户在不同的视图和控制器之间导航。本教程将深入探讨如何在iOS中实现页面跳转,特别关注新手开发者的需求。我们将讨论两种主要的页面跳转方式:模态...
在iOS开发中,"Runtime" 是一个至关重要的概念,它是指Objective-C(简称OC)运行时系统,是苹果为其面向对象编程语言Objective-C提供的一种机制。Runtime系统在程序运行过程中动态解析类、方法等信息,使得OC具有了...
9. **微博素材和博客文章**:提到的博客文章提供了具体实现这种仿iOS界面的步骤和代码示例,开发者可以通过阅读这篇博客来学习和参考。同时,微博上的素材可能包含了一些界面设计的灵感和图片资源,可以帮助开发者更...
ios7信息界面