iOS: 开发中遇到的问题及解决方案(持续更新ing)
数据解析相关
-
案例一
由UITextView创建的textView显示后台返回的数据如下图所示:
购买须知.png解决方法:
//购买须知 UITextView *vi = [[UITextView alloc]initWithFrame:CGRectMake(10, 44, SCREEN_WIDTH-20, SCREEN_HEIGHT/2)]; vi.userInteractionEnabled = NO; vi.scrollEnabled = NO; NSString *htmlStr = _model.product_activity; // 这里不直接由vi.text显示内容,而是通过以下方法转换之后再由vi的attributedText属性显示html格式的内容。 NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[htmlStr dataUsingEncoding:NSUnicodeStringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}documentAttributes:nil error:nil]; vi.attributedText = attributedString;
之后运行模拟器显示结果如下:
购买须知最终版.png2016年11月6日晚更新
控制器之间的跳转相关
-
案例二
案例二.png目前的需求是,点击积分或者团购专区下面的具体的item,然后跳转页面,但是具体跳到哪个页面并不固定。
比如有时候有活动了,就跳转一个与活动相关的H5页面,有时候又需要跳到某个原生的商品列表页或者具体的商品详情页。
解决方法:
plist.png
通过使用Dariel在杭州造的轮子DCURLRouter来暂时解决需求。具体自然是将轮子引入到项目中,然后配置现成的plist文件。
之后在首页控制器的跳转方法里添加如下所示的代码
demo.png最后再在跳转的目标控制器内添加相应的方法用来接收参数,如果没有参数就不需要另行配置了。
效果如下所示:
演示.gif实际应用中,后端只需要把这个url传给客户端,客户端根据这个url跳就可以了,完全不需要管跳到哪个页面,前提当然是得配置了相关的控制器。
这样做的好处也是很明显的:
1.跳转方式灵活,本地进行简单逻辑处理,使用openURL来打开对应的控制器,而这个你想要打开的URL Scheme是可以动态的从服务器获取的。这样就很简单的实现了动态跳转。
2.传递参数的方式与URL一致,只需要在URL里附加上对应的参数即可。
当然,这样做并不是非常美观,本来代码里都是通过push或者present进行跳转的,突然穿插进来这样的跳转方式,会让代码变得很乱又很突兀。小范围的使用只能是解决当务之急的问题,如果整个项目都采用这种方式,那么会非常消耗常驻的内存,所以最佳的方案就是对项目进行拆分,然后进行组件化架构,具体可以学习并参考Casa Taloyum大神的iOS应用架构谈系列文章。
参考资料:
Dariel在杭州的DCURLRouter
另外再附上相关的学习与参考资料(gitHub上1000+stars的项目):
routable-ios
HHRouter
JLRoutes