Object-C iOS纯代码布局 一堆代码可以放这里!
前言:
最近写的文章都是创业类,好吧,今天好好写写技术类的文章!
不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是object-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,以避开入侵。

结果还是失败了,objectC的泛型不支持子类定义类型,唉~~~~
发现在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文件下的插件呢?文件太多,切来切去太伤眼了。
Object-C iOS纯代码布局 一堆代码可以放这里!的更多相关文章
- Objective-C iOS纯代码布局 一堆代码可以放这里!
前言: 最近写的文章都是创业类,好吧,今天好好写写技术类的文章! 不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是objective-c,由于速成的很快,好累! 好在现在基本已经入了点门 ...
- Android 使用纯Java代码布局
java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...
- 在Android中用纯Java代码布局
感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...
- iOS开发 objective C 代码布局
代码布局抛弃storyboard,用代码生成界面,它的优劣不谈 首先在项目设置中,更改应用的"入口" 不选main,清空它 然后在AppDelegate.m中,更改(添加内容),别 ...
- 【原】iOS动态性(四):一行代码实现iOS序列化与反序列化(runtime)
为取得更好的排版效果,本文同样发布在简书上,强烈建议跳转到[1]http://www.jianshu.com/p/fed1dcb1ac9f 一.变量声明 为便于下文讨论,提前创建父类Biology以及 ...
- iOS 使用UIWebView把oc代码和javascript相关联
首先请参看一篇文章,作者写的很明白,请参看原地址 http://blog.163.com/m_note/blog/static/208197045201293015844274/. 其实,oc和js的 ...
- iOS中UIWebView执行JS代码(UIWebView)
iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被 ...
- 【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 ...
随机推荐
- line-height属性总结
line-height属性的继承性: 子元素不设置line-height时, 在父元上设置带单位的值和百分比时会先计算父元素的line-height大小然后继承过来,在父元素上设置无单位的数值时,子 ...
- js中的this关键字,setTimeout(),setInterval()的执行过程
var test1 = { name: 'windseek1', showname: function () { console.log(this.name); } } var test2 = { n ...
- Unity 3D Framework Designing(7)——IoC工厂理念先行
一谈到 『IoC』,有经验的程序员马上会联想到控制反转,将创建对象的责任反转给工厂.IoC是依赖注入 『DI』 的核心,大名鼎鼎的Spring框架就是一个非常卓越的的控制反转.依赖注入框架.遗憾的是, ...
- Nagios安装部署
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; line-height: 150%; fon ...
- 所谓“脚本(Script)”——个人见解浅谈
编程初学者,在学习的时候总会听人说到或者看到“脚本”这个词汇,我初学的时候也不清楚脚本是什么,所以每每看到有人说你会写“脚本”的时候,总以为是一些高深深奥的编程技术.然而事实正好相反,脚本语言是一种比 ...
- How To Use ggplot2
0. Preparation and Introduction ggplot2是R中新颖的数据可视化包,这得益于Leland Wilkinson在他的著作<The Grammar of Grap ...
- char , unsigned char 和 signed char 区别
ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.char相当于signed char或者unsigned char,但是这取决于编译器!这三种字符 ...
- .dll 文件编写和使用
1.基本概念 dll(dynamic-link library),动态链接库,是微软实现共享函数库的一种方式.动态链接,就是把一些常用的函数代码制作成dll文件,当某个程序调用到dll中的某个函数的时 ...
- vue项目目录介绍
Vue项目目录 初始化项目 vue init webpack []projectname] cd [projectname] npm install vue run dev 目录树 +---build ...
- selenium结合docker构建分布式测试环境
selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...