在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言:最近写的文章都是创业类,好吧,今天好好写写技术类的文章! 不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是objective-c,由于速成的很快,好累! 好在现在基本已经入了点门道了,这才看的懂新人的代码,才能提前感受代码危机。 对于IOS的速成口诀,回头再分享,今天先分享一个简单的抽象封装! 1:先看看问题说明:通常对于界面布局,有编写代码、Xib、Storyboard三种方式,而我看到新人写的,是通过代码布局的。看到的代码是这样的: A:编写UI的代码已分离到新的类(.h .m文件)去,但仍然还是留下了不少代码在ViewController中。 图1:(在页加载完后,调用了SetView方法,然后SetView方法里一堆和UI相关的代码) 图2: 2:想想怎么优化目标:让每一个Controller都有一个对应的View的UI类,而Controller类里不要涉及UI创建的问题,尽量0入侵。折腾过程: 这几天学了下ObjectC的扩展类Category,觉的这东东有点搞头。(和C#里的扩展类很像,但不同的是,object-C里扩展方法可以在基类里调到,这很神奇) 可惜扩展类不支持属性,没法把一些变量放到扩展类的属性里,逼的要入侵Controller。 于是我又思考,折衷一下,用泛型定义一个共性的UIView,以避开入侵。 结果还是失败了,objective-C的泛型不支持子类定义类型,唉~~~~ 发现在C#轻松搞定的事,在object-c里不容易啊!!! 3:二次折衷的方法:1:定义Controller的基类,定义一个方法,并在页面加载时调用。 2:假设有LoginController,新建一个LoginView,继承自UIView
3:一些UI相关的定义变量就写在这里了(.h文件)
4:在LoginView添加一个扩展类(不用新建类文件了,直接追加代码就好了): 这里扩展了一个方法叫initUI(等于重写基类的方法) 5:这里就是唯一二次折衷的地方,需要入侵Controller.h,定义一个UI属性。 (之前是想通过把这个属性定义到基类去,可惜泛型不支持子类指定类型) 6:接下来就是写你的UI相关的代码了。 总结:1:手工写的代码的可视化,在调试阶段才能看到,这是很悲催的结果。 2:个人不太建议手工布局代码的,开发效率也是个问题(当然你可以通过封装一些UI代码进一步提升下效率)。 3:不知道XCode没有折叠.h文件到.m文件下的插件呢?文件太多,切来切去太伤眼了。 本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/p/6843564.html |
请发表评论