前言:
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、如果没有,就创建一个空的视图为自己的默认视图。
本文就介绍到这里了。