zoukankan      html  css  js  c++  java
  • Sagit.Framework For IOS 开发框架入门教程11:控制器基类STController

    前言:

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

    本文就介绍到这里了。

  • 相关阅读:
    第一阶段冲刺05
    生成器
    三元表达式 ,列表推导式 , 字典生成式
    装饰器
    闭包函数
    函数的定义和参数
    列表内置方法
    字符串的内置方法
    py_11_ 0731
    py_11_ 0730
  • 原文地址:https://www.cnblogs.com/cyq1162/p/13490579.html
Copyright © 2011-2022 走看看