前言:
Sagit框架中,所有新建的控制器和UI视图都需要继承自框架的基类,本文介绍控制器的基类:STController
STController:基本定义
#import <UIKit/UIKit.h> #import "STEnum.h" @class STView; @class STHttp; @class STMsgBox; @interface STController : UIViewController<UITableViewDelegate,UITableViewDataSource,UICollectionViewDelegate,UICollectionViewDataSource> //!当前控制器的STView根视图 @property (nonatomic,retain) STView* stView; //!用于发起http请求 @property (nonatomic,retain) STHttp *http; //!用于弹窗提示消息 @property (nonatomic,retain) STMsgBox *msgBox; #pragma mark 通用的三个事件方法:onInit、initUI、initData(还有一个位于基类的:reloadData) //!事件在UI初始化之前执行 -(void)onInit; //!UI初始化 -(void)initUI; //!事件在UI初始化之后执行 -(void)initData; //!执行view的stValue属性 -(NSString*)stValue:(NSString*)name; //!执行view的stValue属性 -(void)stValue:(NSString*)name value:(NSString*)value; //!验证文本框的值是否填写或格式是否错误 根据ui的name进行处理 -(BOOL)isMatch:(NSString*)tipMsg name:(NSString*)name; -(BOOL)isMatch:(NSString*)tipMsg name:(NSString*)name regex:(NSString*)pattern; //!验证文本框的值是否填写或格式是否错误 根据已获取的value进行处理 -(BOOL)isMatch:(NSString*)tipMsg value:(NSString*)value; -(BOOL)isMatch:(NSString*)tipMsg value:(NSString*)value regex:(NSString*)pattern; //!根据指定的结果弹出消息。 -(BOOL)isMatch:(NSString*)tipMsg isMatch:(BOOL)result; //!指向view的setToAll:将指定的数据批量赋值到所有的UI中:data可以是字典、是json,是实体等 -(void)setToAll:(id)data; //!指向view的formData: 从UIList中遍历获取属性isFormUI的表单数据列表 -(NSMutableDictionary*)formData; //!指向view的formData: 从UIList中遍历获取属性isFormUI的表单数据列表 superView :指定一个父,不指定则为根视图 -(NSMutableDictionary*)formData:(id)superView; @end
基类主要定义了以下几个种类:
1、常用工具类定义:
STMsgBox、STHttp(这两个类,除了Sagit.XXX调用,也可以在控制器中self.XXX调用。)
示例:
2、初始化事件:onInit、onInitUI、onInitData
onInit、onInitUI事件都是UIView相关,因为框架的核心简化机制在原因。
正常编写一个页面有四个文件:
xxxUIView.h
xxxUIView.m,
xxxController.h,
xxxController.m
而Sagit框架,消掉了前三个文件,只需要xxxController.m即可。
简化后XXXController.h中的定义,直接写到XXXController.m中。
在控制器基类定义了UI的初始函数,可以直接初始化UI代码。
onInit:
一般需要对状态栏、导航栏、进行全局设置的时候,在这个函数设置保险。如果到onInitUI设置,全局的可能不生效。
onInitData:
用于发起网络请求,获取请求数据,并进一步操作UI界面。
3、表单的匹配验证:isMatch
用于对字典的类型或必填进行验证:
示例代码:
提示语:
XXX 不能为空。
XXX 格式错误。
最终提示:手机号不能为空、手机号格式错误。
4、表单的批量取值提交:formData
对于一些个人资料填写的,可以通过批量提交,省去一个一个取值。
示例代码:
点击保存事件的时候,框架自动收集表单内容,进行提交,示例代码:
获取当前表单内容,是个字典。
可以追加其它参数,如经纬度等其它不在表单内呈现的参数。
5、表单的批量自动赋值:setToAll
还是上面那个界面:
还原加载的代码示例:
setToAll接收参数有三种:
1、Json 字符串 2、字典 3、继承自STModelBase的实体类
6、单个UI的字段取值与赋值:stValue
根据UI控件的name来取值或值赋。
其它:核心加载原因:
-(void)loadUI{ //获取当前的类名 NSString* className= NSStringFromClass([self class]); NSString* viewClassName=[className replace:@"Controller" with:@"View"]; Class viewClass=NSClassFromString(viewClassName); if(viewClass!=nil)//view { self.view=self.stView=[[viewClass alloc] initWithController:self]; //[self.stView loadUI]; } else { //这一步,在ViewController中的loadView做了处理,默认self.view就是STView self.view=self.stView=[[STView alloc] initWithController:self];//将view换成STView //self.stView=self.view; } [self initUI]; }
XXXController 初始化时:
1、会先找有没有XXXView的类,如果有,就将它初始化为自己的默认视图。 2、如果没有,就创建一个空的视图为自己的默认视图。
本文就介绍到这里了。
版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号 |
Donation(扫码支持作者):支付宝: |
Donation(扫码支持作者):微信: |