前言:

开篇比较简单:Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置

第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍API,要说的很多,又枯燥乏味。

所以那半篇文章就放下了。

后来又开始思考这教程该怎么写,经过几天的沉淀,终于有了一个决定:

这个教程,就用IT恋里的实例来和大伙分享了,看看在实战是怎么被应用的。

这篇文章分两部分,前面讲实战的应用,后面补充框架设计原理,及未来设想的扩展等。

Sagit 实现引导页功能:

1:首先,我们要有N张引导页的图片

IT恋里就放有3张了,如下(这里图片把翻页的效果直接带上了,我们就省点事了):

2:然后,逻辑与代码:

逻辑流程:

AppDelegate启动时=》检测如果是第一次启动App=》WelcomeController(欢迎引导页)

  1. if([ITGlobal share].IsFirstRun)
  2. {
  3. //欢迎界面
  4. self.window.rootViewController = [WelcomeController new];
  5. }
  6. else if (launchOptions) {}

滑动显示三张图片之后,最后一张触发点击事件,根据条件进入以下界面:

  1. A:(更新App时)存在Token,跳转到:MainController(主界面)
  2.  
  3. B:(第一次时)无Token时,跳转到:StartController(登陆注册引导界面)

然后就是核心的一行代码实现功能了,一切都来的这么简单轻松:

  1. [[self.view addScrollView:nil direction:X imgName:@"welcome_1", @"welcome_2", @"welcome_3", nil].lastSubView click:name];

追加一张效果图:

Sagit 框架原理解说:

1:Controller加载View的原理:

在往上看的第一张图中,注意细节:

  1. A:可以看到引导欢迎界面,只有一个WelcomeController,木有WelcomeView
  2.  
  3. B:而引导注册界面,有和StartController对应的StartView

这个功能是我这两天增加的,主要是考虑到当View里的代码极少时,节省文件的同时,也更简洁。

所以,目前Controller检测加载View的流程是:

  1. @implementation STController
  2.  
  3. - (void)viewDidLoad {
  4. [super viewDidLoad];//获取当前的类名
  5. NSString* className= NSStringFromClass([self class]);
  6. NSString* viewClassName=[className replace:@"Controller" with:@"View"];
  7. Class viewClass=NSClassFromString(viewClassName);
  8. if(viewClass!=nil)//view
  9. {
  10. self.view=self.stView=[[viewClass alloc] initWithController:self];
  11. [self.stView initView];
  12. }
  13. else
  14. {
  15. self.view=[[STView alloc] initWithController:self];//将view换成STView
  16. [self initUI];
  17. }
  18. }
  19. //空方法(保留给子类复盖)
  20. -(void)initUI{}

代码读下来是这样的:

  1. 1: 如果XXXController检测到存在XXXView,则进行加载,并调用其initView方法(里面会再调用initUI方法)
  2.  
  3. --所以框架的默认加载的约定的是XXX名字前缀一样,就会被加载。
  4.  
  5. 2: 如果检测不存在,则调用自身的initUI方法(这就是这里单独一个WelcomeController存在的原因)。

2:UIView的AddUI相关的方法。

框架扩展了UIView,增了常用了组件方法,并对这些组件,进行了些特殊的处理:

  1. -(void)addView:(UIView *)view name:(NSString*)name;
  2. -(UIView*)addUIView:(NSString*)name;
  3. -(UIButton*)addSwitch:(NSString*)name;
  4. -(UIButton *)addStepper:(NSString *)name;
  5. -(UIButton *)addSlider:(NSString *)name;
  6. -(UIButton *)addProgress:(NSString *)name;
  7.  
  8. -(UILabel*)addLabel:(NSString*)name;
  9. -(UILabel*)addLabel:(NSString*)name text:(NSString*)text;
  10. -(UILabel*)addLabel:(NSString*)name text:(NSString*)text font:(NSInteger)px;
  11. -(UIImageView*)addImageView:(NSString*)name;
  12. -(UIImageView*)addImageView:(NSString*)name imgName:(NSString*)imgName;
  13. -(UIImageView*)addImageView:(NSString*)name imgName:(NSString*)imgName xyFlag:(XYFlag)xyFlag;
  14.  
  15. -(UITextField*)addTextField:(NSString*)name;
  16. -(UITextField*)addTextField:(NSString*)name placeholder:(NSString*)placeholder;
  17. -(UITextView*)addTextView:(NSString*)name;
  18.  
  19. -(UIButton*)addButton:(NSString*)name;
  20. -(UIButton*)addButton:(NSString*)name imgName:(NSString*)imgName;
  21. -(UIButton*)addButton:(NSString*)name imgName:(NSString*)imgName buttonType:(UIButtonType)buttonType;
  22. -(UIButton*)addButton:(NSString*)name title:(NSString*)title;
  23. -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px;
  24. -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px buttonType:(UIButtonType)buttonType;
  25. -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px imgName:(NSString*)imgName buttonType:(UIButtonType)buttonType;
  26. -(UIView*)addLine:name color:(id)colorOrHex;
  27. -(UIScrollView*)addScrollView:(NSString*)name;
  28. -(UIScrollView *)addScrollView:(NSString*)name direction:(XYFlag)direction imgName:(NSString*)imgName,...NS_REQUIRES_NIL_TERMINATION;

有些组件目前还没涉及,后续根据项目情况可能会追加或进一步优化。

这里先讲一下addScrollView的基础用法:

  1. -(UIScrollView *)addScrollView:(NSString*)name direction:(XYFlag)direction imgName:(NSString*)imgName,...NS_REQUIRES_NIL_TERMINATION;

核心讲解:

  1. :每个UI都有个name属性,这个name很核心,可以关联事件,用于寻找UI,也用于对UI取值赋值,如果实在没用到,可以赋nil
  2.  
  3. XYFlag 指求滑动是左右的X,还是上下的Y
  4.  
  5. :可以指定一个可追加的图片名称,用于加载图片(内部加载时,会自动根据数据调整ScrollView和图片的宽高等属性)。
  6.  
  7. :对于一个addUIView,没指定xy宽高时,会自动继承上一个相对视图的frame属性,这里是继承父视图,全屏了。

3:事件的触发

AddScrollView只是追加了图片,并可以滑动,但我们需要对最后一张图片增加点击事件:

所以需要先拿到最后一张图片,框架对UIView扩展了四个属性:

  1. -(UIView*)lastSubView;
  2. -(UIView*)firstSubView;
  3. -(UIView*)preView;
  4. -(UIView*)nextView;

用于方便拿到子视图的第一个和最后一个,以及自己同级的上一个和下一个。

接着,是对这个UIView,追加点击事件。

框架对于UIView扩展了两种点击事件的绑定方式:

  1. #pragma mark 扩展系统事件
  2. -(UIView*)click:(NSString*)event;
  3. - (UIView*)addClick:(onClick)block;

click用于指定一个事件的名称,addClick用于追加一个事件执行的代码块。

这里先讲click传的event名字的寻找事件的流程:

  1. :先找传进来的event在所在的Controller中是否有对应的事件,若有,执行,若没有继续以下:
  2.  
  3. :对event追加后缀变成eventClickeventClick:再看有没有对应的事件,若有,执行,若没有继续以下:
  4.  
  5. :对event追加后缀变成EventController,看有没有对应的控制器,若有,执行默认的open:事件跳转,若没有,则无绑定事件。

OK,原理讲解到这里,大伙再重温一下这行代码:

  1. [[self.view addScrollView:nil direction:X imgName:@"welcome_1", @"welcome_2", @"welcome_3", nil].lastSubView click:name];

总结:

这些天一直在改进框架,相信随着框架的不断完善,可以让大伙编写IOS代码时,变的轻松很多!!!

下一篇,我们以跳转到登陆注册引导页为示例,继续下一篇教程。

最后,谢谢大伙对Sagit框架和本人IT连创业项目的关注!

Sagit.Framework For IOS 开发框架入门开发教程2:一行代码实现引导页的更多相关文章

  1. Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置

    背景: 前天开源了框架:开源:Sagit.Framework For IOS 开发框架 所以注定要追补一套开发教程了,所以尽量抽空了!!! 步骤 1:下载框架源码 GitHub:https://git ...

  2. Sagit.Framework For IOS 开发框架入门教程3:Start引导页及框架布局和隐藏事件的内幕

    前言: 框架依旧在快速更新着:在重构.简化代码,统一标准的过程中. 中间也遇到各种坑,不过好在一步一脚印的解决了. 虽然还有些功能还在思考,不过教程,还是得补上: 上篇文章:Sagit.Framewo ...

  3. Sagit.Framework For IOS 开发框架入门教程4:注册页布局-被消灭的变量

    前言: 上篇写完:Sagit.Framework For IOS 开发框架入门教程3:Start引导页-框架布局和隐藏事件的内幕 之后,好久没写文章了,有IT连创业系列.有DotNetCore的一篇文 ...

  4. Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp

    前言: IOS的文章,今天,再来补一篇,Sagit的教程: 虽然感觉IOS的文章没什么观众,还是努力写吧,-_-〜 Sagit 开源地址:https://github.com/cyq1162/Sagi ...

  5. Sagit.Framework For IOS 开发框架入门教程5:消息弹窗STMsgBox

    前言: 昨天刚写了一篇IT连创业的文章:IT连创业系列:产品设计之答题模块,(欢迎大伙关注!) 感觉好久没写IOS的文章了,今天趁机,来补一篇,Sagit的教程. Sagit 开源地址:https:/ ...

  6. iOS 9应用开发教程之使用代码添加按钮美化按钮

    iOS 9应用开发教程之使用代码添加按钮美化按钮 丰富的用户界面 在iOS9中提供了很多的控件以及视图来丰富用户界面,对于这些视图以及控件我们在上一章中做了简单的介绍.本章我们将详细讲解这些视图. i ...

  7. 开源:Sagit.Framework For IOS 开发框架

    一:创造Sagit开发框架的起因: 记得IT连创业刚进行时,招了个IOS的女生做开发,然后: ----------女生的事故就此开始了----------- 1:面试时候:有作品,态度也不错,感觉应该 ...

  8. Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。

    前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成 ...

  9. Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

随机推荐

  1. Host文件简介

    摘抄自:http://www.cnblogs.com/zgx/archive/2009/03/10/1408017.html.百度百科:hosts文件 很奇怪有很多人不知道Hosts是什么东西.在网络 ...

  2. Maximum Clique

    Maximum Clique Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...

  3. WuKong

    WuKong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. 最小k个数

    题目 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思考 方法0: 直接排序然后返回前k个,最好的时间复杂度为 O(nlo ...

  5. struts2 中文乱码问题,自定义过滤器通用解决方法

    问题描述 在JSP中使用form表单向后台action中传递中文参数,后台action接收到参数出现中文乱码.JSP页面统一采用了utf-8编码格式.由于struts2默认采用的编码为utf-8,根据 ...

  6. ldap数据库--ldapsearch,ldapmodify

    简单介绍一下ldapsearch命令,在ldap搜索条目时很有用,只要适当调整filter就可以. 命令如下: ldapsearch -h hostname -p port -b baseDN -D ...

  7. 通过PING命令中的TTL来判断对方操作系统

    ---恢复内容开始--- 通过PING命令中的TTL来判断对方操作系统简单来说,TTL全程Time to Live,意思就是生存周期.首先要说明ping命令是使用的网络层协议ICMP,所以TTL指的是 ...

  8. 无状态的web应用(单个py文件的Django占位图片服务器)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 阅读本文建议了解Django框架的基本工作流程,了解WSGI应用,如果对以上不是很清楚,建议结 ...

  9. 一起写框架-MVC框架-基础功能-Date类型数据绑定(七)

    实现功能 表单请求传递的数据,格式为以下格式的日期时间数据. (1):yyyy-MM-dd hh:mm:ss (2):yyyy-MM-dd 执行方法可以使用Date类型接收. 实现思路 1.获得表单字 ...

  10. c# 条形码(求指教)

    因公司需要完成一条形码打印问题,所以在找到一些资料做了一个Demo 特请教! 不知道此条形码是否正确: 图: 源码: 代码 ));            }            g.Save();  ...