1. 程式人生 > 實用技巧 >Sagit.Framework For IOS 開發框架入門教程11:控制器基類STController

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、如果沒有,就建立一個空的檢視為自己的預設檢視。

本文就介紹到這裡了。