在项目中,我们可能碰到这样的情况,产品想要一个灵活的入口。比如首页的轮播banner、商品中间穿插的banner等等。这些入口可能跳转详情页,也可能是web页,也可能是分类页。那么怎么实现让后台服务器来控制客户端跳转呢?
首先跟后台约定好,增加两个字段:template、paramete。一个用来创建控制器,一个是创建好的控制器里请求的参数,然后给所有想支持动态跳转的控制器起好名字,例如详情页叫XXX_Detail。
当我们收到服务器传来的template和paramete时,我们根据template的值:XXX_Detail,去寻找与其对应的控制器名字XXX_DetailController。 (这里不推荐让后台直接传递控制器名字,因为随着工程越来越大,控制器越来越多,可能会觉得原来的控制器名字起得不好或新加的控制器更适合那个名字而发生更改)
- (id)viewControllerGenericFromScheme:(NSString ) className {
const char * _classNameCString = [className cStringUsingEncoding:NSASCIIStringEncoding];
/* 使用字符串获取一个类 /
Class _controllerClass= objc_getClass(_classNameCString);
if (newClass==nil) {
Class superClass = [NSObject class];
_controllerClass = objc_allocateClassPair(superClass, classNameCString, 0);
objc_registerClassPair(_controllerClass);
}
/* 创建实例对象 /
id instance = [[_controllerClass alloc] init];
((UIViewController )instance).hidesBottomBarWhenPushed = YES;
/ 属性自动赋值 /
[self autoSetInstanceProperty:instance];
return instance;
}
- (void)autoSetInstanceProperty:(id)instance{
NSString * _paramete = [self parametePropertyValue];
[instance setValue: _paramete forKey:@"paramete"];
/* 多个参数可以仿照此参数继续赋值 */
}
- (NSString *) parametePropertyValue {
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([self class], &outCount);
for (i=0; i<outCount; i++) {
objc_property_t property = properties[i];
NSString * key = [[NSString alloc]initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
id propertyValue = [self valueForKey:key];
if ([key isEqualToString:@"paramete"]) {
if (![CLCommonFunction isBlankString:propertyValue]) {
return propertyValue;
} else {
return nil;
}
}
}
return nil;
}
这样,只要在外面使用模型传入控制名字就可以返回一个控制器的实例对象。
UIViewController *createVc = [model viewControllerGenericFromScheme:className];
有了控制器实例对象,然后跳转过去就可以了,此方法也可用于收到推送后的处理,只要将template、paramete携带在推送里,就可以跳到指定页面,并用paramete进行请求。
iOS: 由服务端控制,动态跳转控制器
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本文转载自:http://southpeak.github.io/2014/10/25/objective-c-r...