Sagit.Framework For IOS 開發框架入門教程11:控制器基類STController
阿新 • • 發佈:2020-08-12
前言:
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、如果沒有,就建立一個空的檢視為自己的預設檢視。
本文就介紹到這裡了。