Objective-C iOS纯代码布局 一堆代码可以放这里!
前言:
最近写的文章都是创业类,好吧,今天好好写写技术类的文章!
不过分享的不是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文件下的插件呢?文件太多,切来切去太伤眼了。
Objective-C iOS纯代码布局 一堆代码可以放这里!的更多相关文章
- Object-C iOS纯代码布局 一堆代码可以放这里!
前言: 最近写的文章都是创业类,好吧,今天好好写写技术类的文章! 不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是object-c,由于速成的很快,好累! 好在现在基本已经入了点门道了, ...
- iOS开发 objective C 代码布局
代码布局抛弃storyboard,用代码生成界面,它的优劣不谈 首先在项目设置中,更改应用的"入口" 不选main,清空它 然后在AppDelegate.m中,更改(添加内容),别 ...
- Android 使用纯Java代码布局
java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...
- 在Android中用纯Java代码布局
感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...
- 【原】iOS动态性(四):一行代码实现iOS序列化与反序列化(runtime)
为取得更好的排版效果,本文同样发布在简书上,强烈建议跳转到[1]http://www.jianshu.com/p/fed1dcb1ac9f 一.变量声明 为便于下文讨论,提前创建父类Biology以及 ...
- 【iOS 使用github上传代码】详解
[iOS 使用github上传代码]详解 一.github创建新工程 二.直接添加文件 三.通过https 和 SSH 操作两种方式上传工程 3.1https 和 SSH 的区别: 3.1.1.前者可 ...
- bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码
1,点击布局文件,出现 Cannot find declaration to go to ? 且 点击代码不能跟踪代码? 把 项目的build.gradle 中的 compileSdkVersi ...
- IOS 推送-配置与代码编写
IOS 推送配置与代码编写 这里介绍IOS的推送,本文章已经在IOS6/7/8上都能运行OK,按照道理IOS9应该没问题. 大纲: 1.文章前提 2.推送介绍 3.推送文件账号设置 4.推送证书介绍 ...
- 【转】一个DIV+CSS代码布局的简单导航条
原文地址:http://www.divcss5.com/shili/s731.shtml 简单的DIV CSS代码布局实现导航条 一个蓝色主题的导航条布局案例,本CSS小实例,采用DIV CSS实现. ...
随机推荐
- Redis分布式缓存
Redis 主 slave 数据库优化-- 加inex, 分区 JVM调优--参数设置,比如偏向于计算的如何设置? 线程池:queue放满了之后,有什么方式能让他不拒绝掉?blockqueue就等在那 ...
- 十六、IDEA创建一个maven工程
1.点击Create new Project 2.选择maven,使用的jdk,点击next; 3.填写GroupId和工程名,点击next; 4.默认不做其他修改,点击Finish; 5.创建成功
- Oracle通过SCN做增量备份修复DG
DG由于网络原因或者bug原因经常不同步,有时隔得时间久了,就会丢失归档日志,或者长时间的归档恢复较慢,有一种可以基于scn的方式来恢复DG库,使用基于scn的增量备份来恢复standby库可以节省大 ...
- springboot练习
https://www.jianshu.com/p/9a08417e4e84 1.@Controller和@RestController的区别? Spring4之后加入的注解,原来在@Controll ...
- select 的选中问题
function bind(pageIndex) { if (getQueryString("_status") == "3") {//从首页中慢病管理人数进入 ...
- Scrapy运行ImportError: No module named win32api错误
windows系统上出现这个问题的解决需要安装Py32Win模块,更方便的做法是: pip install pypiwin32
- laravel-安装验证码扩展
第一步:找到验证码扩展 链接:https://packagist.org/packages/mews/captcha 第二步:安装 环境要求:验证码需要开启php的gd库 . 执行命令(有时候安装会出 ...
- web网站使用qq第三方登录
Html代码: <a href=’/QQlogin’>qq登录</a> //后台代码: @RequestMapping(value = "/QQlogin" ...
- 微信小程序的一些小知识点
1. <text>hello</text> 只有包含在<text>标签内的文字,在手机上才可以长按选中. 2. 单位px:自适应rpx = 1:1 物理像素除以2得 ...
- Java-常用工具方法
一 Json转换 1 输出组装好的json ObjectMapper mapper = new ObjectMapper(); try { String requiredJson = mapper.w ...