Object-C iOS纯代码布局 一堆代码可以放这里!

时间:2022-09-07 20:42:52

前言:

最近写的文章都是创业类,好吧,今天好好写写技术类的文章!

不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是object-c,由于速成的很快,好累!

好在现在基本已经入了点门道了,这才看的懂新人的代码,才能提前感受代码危机。

对于IOS的速成口诀,回头再分享,今天先分享一个简单的抽象封装!

1:先看看问题

说明:通常对于界面布局,有编写代码、Xib、Storyboard三种方式,而我看到新人写的,是通过代码布局的。

看到的代码是这样的:

A:编写UI的代码已分离到新的类(.h .m文件)去,但仍然还是留下了不少代码在ViewController中。

图1:(在页加载完后,调用了SetView方法,然后SetView方法里一堆和UI相关的代码)

Object-C iOS纯代码布局 一堆代码可以放这里!

图2:

Object-C iOS纯代码布局 一堆代码可以放这里!

2:想想怎么优化

目标:让每一个Controller都有一个对应的View的UI类,而Controller类里不要涉及UI创建的问题,尽量0入侵。

折腾过程:

这几天学了下ObjectC的扩展类Category,觉的这东东有点搞头。(和C#里的扩展类很像,但不同的是,object-C里扩展方法可以在基类里调到,这很神奇)

可惜扩展类不支持属性,没法把一些变量放到扩展类的属性里,逼的要入侵Controller。

于是我又思考,折衷一下,用泛型定义一个共性的UIView,以避开入侵。

Object-C iOS纯代码布局 一堆代码可以放这里!

结果还是失败了,objectC的泛型不支持子类定义类型,唉~~~~

发现在C#轻松搞定的事,在object-c里不容易啊!!!

3:二次折衷的方法:

1:定义Controller的基类,定义一个方法,并在页面加载时调用。

Object-C iOS纯代码布局 一堆代码可以放这里!

2:假设有LoginController,新建一个LoginView,继承自UIView

Object-C iOS纯代码布局 一堆代码可以放这里!

3:一些UI相关的定义变量就写在这里了(.h文件)

Object-C iOS纯代码布局 一堆代码可以放这里!

4:在LoginView添加一个扩展类(不用新建类文件了,直接追加代码就好了):

这里扩展了一个方法叫initUI(等于重写基类的方法)

Object-C iOS纯代码布局 一堆代码可以放这里!

5:这里就是唯一二次折衷的地方,需要入侵Controller.h,定义一个UI属性。

(之前是想通过把这个属性定义到基类去,可惜泛型不支持子类指定类型)

Object-C iOS纯代码布局 一堆代码可以放这里!

6:接下来就是写你的UI相关的代码了。

Object-C iOS纯代码布局 一堆代码可以放这里!

总结:

1:手工写的代码的可视化,在调试阶段才能看到,这是很悲催的结果。

2:个人不太建议手工布局代码的,开发效率也是个问题(当然你可以通过封装一些UI代码进一步提升下效率)。

3:不知道XCode没有折叠.h文件到.m文件下的插件呢?文件太多,切来切去太伤眼了。

Object-C iOS纯代码布局 一堆代码可以放这里!的更多相关文章

  1. Objective-C iOS纯代码布局 一堆代码可以放这里!

    前言: 最近写的文章都是创业类,好吧,今天好好写写技术类的文章! 不过分享的不是IOS相关的文章,毕竟这几天在速成IOS,看的是objective-c,由于速成的很快,好累! 好在现在基本已经入了点门 ...

  2. Android 使用纯Java代码布局

    java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...

  3. 在Android中用纯Java代码布局

    感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...

  4. iOS开发 objective C 代码布局

    代码布局抛弃storyboard,用代码生成界面,它的优劣不谈 首先在项目设置中,更改应用的"入口" 不选main,清空它 然后在AppDelegate.m中,更改(添加内容),别 ...

  5. 【原】iOS动态性(四):一行代码实现iOS序列化与反序列化(runtime)

    为取得更好的排版效果,本文同样发布在简书上,强烈建议跳转到[1]http://www.jianshu.com/p/fed1dcb1ac9f 一.变量声明 为便于下文讨论,提前创建父类Biology以及 ...

  6. iOS 使用UIWebView把oc代码和javascript相关联

    首先请参看一篇文章,作者写的很明白,请参看原地址 http://blog.163.com/m_note/blog/static/208197045201293015844274/. 其实,oc和js的 ...

  7. iOS中UIWebView执行JS代码(UIWebView)

    iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被 ...

  8. 【iOS 使用github上传代码】详解

    [iOS 使用github上传代码]详解 一.github创建新工程 二.直接添加文件 三.通过https 和 SSH 操作两种方式上传工程 3.1https 和 SSH 的区别: 3.1.1.前者可 ...

  9. bug__android studio 出现布局文件不提示,且点击代码不能跟踪代码

    1,点击布局文件,出现  Cannot find declaration to  go to ? 且 点击代码不能跟踪代码? 把 项目的build.gradle 中的  compileSdkVersi ...

随机推荐

  1. windows下cmd时复制dos中的内容 错误信息等

    16:28 2015/11/23小发现 windows下cmd时复制dos中的内容,错误信息等:鼠标右键选择标记,然后ctrl c 即可.

  2. 从零开始学iPhone开发(2)——控件的使用

    这一节我们开始学习iOS中简单控件的使用. 在iOS编程中,简单的控件有很多,其中主要的用的多的有: UILabel,UIButton,UISegmentedControl, UITextField, ...

  3. 未能解析目标框架“.NETFramework,Version=v4.0”的 mscorlib 错误的解决办法

    查看项目属性,发现该项目的目标框架是.NET Framework 4 Client Profile ,而被引用的程序集的目标框架是.NET Framework 4,将该项目的目标框架修改成.NET F ...

  4. MyBatis缓存策略

    MyBatis 提供了一级缓存和二级缓存策略,一级缓存是作用在SqlSession级别上的,而二级缓存则是作用在Mapper级别上的( 即作用在 namespace上),MyBatis 默认是开启的一 ...

  5. C语言列出真分数序列代码及解析

    问题描述 按递增顺序依次列出所有分母为60,分子小于60的最简分数. 问题分析 分子.分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数的分数,叫做最简分数,又称既约分数,如2/3,8/9,3 ...

  6. C. Prefixes and Suffixes

    链接 [https://codeforces.com/contest/1092/problem/C] 题意 给你某个字符串的长度n,再给你2*n-2个前缀或者后缀 让你判断那些是前缀那些是后缀 关键是 ...

  7. 半深入理解CSS3 object-position/object-fit属性

    半深入理解CSS3 object-position/object-fit属性 转载:https://www.zhangxinxu.com/wordpress/2015/03/css3-object-p ...

  8. [Windows Azure] Getting Started with Windows Azure SQL Database

    In this tutorial you will learn the fundamentals of Windows Azure SQL Database administration using ...

  9. SecureCRT配置自动保存日志(实用)

    点“选项”---“全局选项”--“全局选项”--“默认会话”--“编辑默认设置”--“日志文件” 在“日志文件”中输入相应的参数就能达到这一效果. 比如你的日志文件放在的D:/SecureCRT/lo ...

  10. HTML5新标签的兼容性处理

    普通浏览器 普通不支持HTML5新标签的浏览器 -- 能正常解析,但会当初成 inline 元素对待 在不支持HTML5新标签的浏览器里,会将这些新的标签解析成行内元素(inline)对待,所以我们只 ...