- 浏览: 38791 次
文章分类
最新评论
-
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 625Xcode7 使用NSURLSession发送HTTP请求的问 ... -
iOS UITableViewCell 中 调整imageView 的图片大小
2015-08-26 16:10 1300//设置图片 [cell.imageView setImage ... -
周堋斐:梦想的开发者
2015-04-13 17:56 012年的深圳软件园也是各种。呵呵哒 -
IOS判断app在appstore是否有可用的更新
2015-03-13 10:25 499iTunes可以提供app的版本信息,主要通过appid获取, ... -
uitableview分割线 左右边距相同
2015-01-21 15:59 2483_myTableView1.separatorInset= ... -
在uiimageview中设置网络图片等比例大小
2014-12-30 15:38 689NSData *data=[NSData dataWith ... -
[转]iOS UISCrollView循环滚动 实现
2014-12-30 13:42 652google了半天发现很多人竟然搞不定,甚至还有人用数组左移右 ... -
push的时候,感觉上一个页面的视图还有残留,然后停顿了一下,才消失的解决
2014-12-10 20:04 1804这个,以前遇到过,后来不知怎么弄好了,现在就是你如果改下pus ... -
view整体上移
2014-11-26 16:06 739如果你准备将你的老的 iOS 6 app 迁移到 iOS 7/ ... -
广告轮播
2014-11-17 20:05 432h <UIAlertViewDelegate,UIScr ... -
设置全局navigation barbuttonitem
2014-11-17 19:58 694#pragma mark 设置全局navigation bar ... -
nsdate 前一天,后一天
2014-11-17 19:57 1124h { NSDate *choseDate;//显示日 ... -
sdwebimage ios8 报错
2014-11-02 00:22 617报错:Use of undeclared identifier ... -
之前有人整理过Git上好用的iOS库,我搬运一下
2014-10-31 14:56 278之前有人整理过Git上好用的iOS库,我搬运一下: http: ... -
ios中添加和移除view
2014-08-14 11:36 787la = [[UILabel alloc]init]; ... -
UITextField只能输入数字且小数点后保留2位
2014-07-18 17:17 530#pragma mark UITextFieldDeleg ... -
NSTimer倒计时
2014-07-17 10:56 497// [NSTimer scheduledTimerWithT ... -
转】视图切换总结
2014-06-04 12:06 5121、利用ModalViewController切换View ... -
ios 判断网络连接以及获取路由信息
2014-05-29 11:53 1630首先 引入 Reachability.h 和Reachabil ... -
UINavigationController如何连续返回两级/回到第一级
2014-01-18 09:44 760//连续返回两级 int index=[[self.navig ...
相关推荐
详细的IOS界面跳转及传值,包含toolbar实现多个view之间的跳转以及界面内按钮实现跳转,用到单例模式: 在第一个界面登陆,在第二个界面显示名字,并且根据不同的名字显示不同的图片 (最好不要加toolbar) 博客参考...
iOS runtime实用篇:让你快速上手一个项目 - CocoaChina_让移动开发更简单1
ios页面跳转 delegate 隐藏键盘一个小小的登陆跳转到一个显示输入的内容
ios protocol 界面跳转demo 代理
iOSAPP跳转微信小程序的Demo,仅用于演示作用,集成细节在博客中有详细介绍,可移驾这里:https://blog.csdn.net/fuzheng0301/article/details/100036332
iOS页面跳转的各式动画,比较全面; UIView animateWithDuration:DURATION animations:^{ [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition:transition forView:view ...
ios人机界面交互指南,以真实案例为依据讲解如何呈现更好的ios应用视觉效果,以及如何增加用户粘性和用户体验。
ios7信息界面
手动控制界面旋转的核心思路就是利用UIView的transform属性,旋转App的根视图。何为根视图?如果你的App的window.rootViewController是UINavigationController,那么根视图就是navigationController.view。
最近一个项目需要iOS和安卓使用一个二维码,让扫描的机器自己识别操作系统实现跳转到相应的下载链接。比如iPhone用微信进行扫描就让他跳转appStore的下载页面,安卓机器使用微信扫描就直接跳浏览器下载。但是这...
http://blog.csdn.net/qq_15509071/article/details/72148540 这个博客的示例代码
iOS 隐私界面保护方法.zip,保护应用程序快照中的敏感数据。
iOS 简洁的界面
ios5拨号界面,让ios6恢复成ios5
iOS 应用跳转路由,通过URL直接跳转到应用的某一控制器
IOS引导界面 欢迎界面 实现了 UISccrollView 以及 图片碎裂的动画效果
里面是详细的ios页面跳转demo程序,详细见博客http://blog.csdn.net/square_l/article/details/46326239
(FMDB + runtime)数据库操作框架 YUDBFramework
IOS程序间跳转例子程序,包括了两个例子程序,实现了两个程序之间跳转的功能,和配套的博客相对应。http://blog.csdn.net/liuyinghui523/article/details/77850299