Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

2年前 (2022) 程序员胖胖胖虎阿
182 0 0

前言:

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调用。)

示例:

Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

 

 

2、初始化事件:onInit、onInitUI、onInitData

onInit、onInitUI事件都是UIView相关,因为框架的核心简化机制在原因。

正常编写一个页面有四个文件:

xxxUIView.h

xxxUIView.m,

xxxController.h,

xxxController.m

而Sagit框架,消掉了前三个文件,只需要xxxController.m即可。

Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

 

 简化后XXXController.h中的定义,直接写到XXXController.m中。

在控制器基类定义了UI的初始函数,可以直接初始化UI代码。

onInit:

一般需要对状态栏、导航栏、进行全局设置的时候,在这个函数设置保险。如果到onInitUI设置,全局的可能不生效。

onInitData:

用于发起网络请求,获取请求数据,并进一步操作UI界面。

3、表单的匹配验证:isMatch

用于对字典的类型或必填进行验证:

示例代码:

Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

 

提示语:

XXX 不能为空。

XXX 格式错误。

最终提示:手机号不能为空、手机号格式错误。 

 

4、表单的批量取值提交:formData

 对于一些个人资料填写的,可以通过批量提交,省去一个一个取值。

示例代码:

Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

 

 点击保存事件的时候,框架自动收集表单内容,进行提交,示例代码:

Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

 

 获取当前表单内容,是个字典。

可以追加其它参数,如经纬度等其它不在表单内呈现的参数。

5、表单的批量自动赋值:setToAll

 还是上面那个界面:

还原加载的代码示例:

Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

 

 

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、如果没有,就创建一个空的视图为自己的默认视图。

本文就介绍到这里了。

相关文章

暂无评论

暂无评论...