开篇比较简单: Sagit.Framework For IOS 开发框架入门开发教程 1:框架下载与环境配置
第二篇教程之前写了一半,感觉不太好写,而且内容单纯介绍 API,要说的很多,又枯燥乏味。
所以那半篇文章就放下了。
后来又开始思考这教程该怎么写,经过几天的沉淀,终于有了一个决定:
这个教程,就用 IT 恋里的实例来和大伙分享了,看看在实战是怎么被应用的。
这篇文章分两部分,前面讲实战的应用,后面补充框架设计原理,及未来设想的扩展等。
IT 恋里就放有 3 张了,如下(这里图片把翻页的效果直接带上了,我们就省点事了):
逻辑流程:
AppDelegate 启动时 =》检测如果是第一次启动 App=》WelcomeController(欢迎引导页)
- if([ITGlobal share].IsFirstRun)
- {
- //欢迎界面
- self.window.rootViewController = [WelcomeController new];
- }
- else if (launchOptions) {}
滑动显示三张图片之后,最后一张触发点击事件,根据条件进入以下界面:
- A: (更新App时)存在Token,跳转到:MainController(主界面)
- B: (第一次时)无Token时,跳转到:StartController(登陆注册引导界面)
然后就是核心的一行代码实现功能了,一切都来的这么简单轻松:
- [[self.view addScrollView: nil direction: X imgName: @"welcome_1", @"welcome_2", @"welcome_3", nil].lastSubView click: name];
在往上看的第一张图中,注意细节:
- A:可以看到引导欢迎界面,只有一个WelcomeController,木有WelcomeView。
- B:而引导注册界面,有和StartController对应的StartView。
这个功能是我这两天增加的,主要是考虑到当 View 里的代码极少时,节省文件的同时,也更简洁。
所以,目前 Controller 检测加载 View 的流程是:
- @implementation STController
- - (void)viewDidLoad {
- [super viewDidLoad];//获取当前的类名
- 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 initView];
- }
- else
- {
- self.view=[[STView alloc] initWithController:self];//将view换成STView
- [self initUI];
- }
- }
- //空方法(保留给子类复盖)
- -(void)initUI{}
代码读下来是这样的:
2:UIView 的 AddUI 相关的方法。
- 1 : 如果XXXController检测到存在XXXView,则进行加载,并调用其initView方法(里面会再调用initUI方法)
- --所以框架的默认加载的约定的是XXX名字前缀一样,就会被加载。
- 2 : 如果检测不存在,则调用自身的initUI方法(这就是这里单独一个WelcomeController存在的原因)。
框架扩展了 UIView,增了常用了组件方法,并对这些组件,进行了些特殊的处理:
- -(void)addView:(UIView *)view name:(NSString*)name;
- -(UIView*)addUIView:(NSString*)name;
- -(UIButton*)addSwitch:(NSString*)name;
- -(UIButton *)addStepper:(NSString *)name;
- -(UIButton *)addSlider:(NSString *)name;
- -(UIButton *)addProgress:(NSString *)name;
- -(UILabel*)addLabel:(NSString*)name;
- -(UILabel*)addLabel:(NSString*)name text:(NSString*)text;
- -(UILabel*)addLabel:(NSString*)name text:(NSString*)text font:(NSInteger)px;
- -(UIImageView*)addImageView:(NSString*)name;
- -(UIImageView*)addImageView:(NSString*)name imgName:(NSString*)imgName;
- -(UIImageView*)addImageView:(NSString*)name imgName:(NSString*)imgName xyFlag:(XYFlag)xyFlag;
- -(UITextField*)addTextField:(NSString*)name;
- -(UITextField*)addTextField:(NSString*)name placeholder:(NSString*)placeholder;
- -(UITextView*)addTextView:(NSString*)name;
- -(UIButton*)addButton:(NSString*)name;
- -(UIButton*)addButton:(NSString*)name imgName:(NSString*)imgName;
- -(UIButton*)addButton:(NSString*)name imgName:(NSString*)imgName buttonType:(UIButtonType)buttonType;
- -(UIButton*)addButton:(NSString*)name title:(NSString*)title;
- -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px;
- -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px buttonType:(UIButtonType)buttonType;
- -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px imgName:(NSString*)imgName buttonType:(UIButtonType)buttonType;
- -(UIView*)addLine:name color:(id)colorOrHex;
- -(UIScrollView*)addScrollView:(NSString*)name;
- -(UIScrollView *)addScrollView:(NSString*)name direction:(XYFlag)direction imgName:(NSString*)imgName,...NS_REQUIRES_NIL_TERMINATION;
有些组件目前还没涉及,后续根据项目情况可能会追加或进一步优化。
这里先讲一下 addScrollView 的基础用法:
- -(UIScrollView *)addScrollView:(NSString*)name direction:(XYFlag)direction imgName:(NSString*)imgName,...NS_REQUIRES_NIL_TERMINATION;
核心讲解:
3:事件的触发
- 1:每个UI都有个name属性,这个name很核心,可以关联事件,用于寻找UI,也用于对UI取值赋值,如果实在没用到,可以赋nil。
- 2:XYFlag指求滑动是左右的X,还是上下的Y。
- 3:可以指定一个可追加的图片名称,用于加载图片(内部加载时,会自动根据数据调整ScrollView和图片的宽高等属性)。
- 4:对于一个add的UIView,没指定xy宽高时,会自动继承上一个相对视图的frame属性,这里是继承父视图,全屏了。
AddScrollView 只是追加了图片,并可以滑动,但我们需要对最后一张图片增加点击事件:
所以需要先拿到最后一张图片,框架对 UIView 扩展了四个属性:
- -(UIView*)lastSubView;
- -(UIView*)firstSubView;
- -(UIView*)preView;
- -(UIView*)nextView;
用于方便拿到子视图的第一个和最后一个,以及自己同级的上一个和下一个。
接着,是对这个 UIView,追加点击事件。
框架对于 UIView 扩展了两种点击事件的绑定方式:
- #pragma mark 扩展系统事件
- -(UIView*)click:(NSString*)event;
- - (UIView*)addClick:(onClick)block;
click 用于指定一个事件的名称,addClick 用于追加一个事件执行的代码块。
这里先讲 click 传的 event 名字的寻找事件的流程:
- 1:先找传进来的event在所在的Controller中是否有对应的事件,若有,执行,若没有继续以下:
- 2:对event追加后缀变成eventClick和eventClick: 再看有没有对应的事件,若有,执行,若没有继续以下:
- 3:对event追加后缀变成EventController,看有没有对应的控制器,若有,执行默认的open: 事件跳转,若没有,则无绑定事件。
OK,原理讲解到这里,大伙再重温一下这行代码:
- [[self.view addScrollView: nil direction: X imgName: @"welcome_1", @"welcome_2", @"welcome_3", nil].lastSubView click: name];
这些天一直在改进框架,相信随着框架的不断完善,可以让大伙编写 IOS 代码时,变的轻松很多!!!
下一篇,我们以跳转到登陆注册引导页为示例,继续下一篇教程。
最后,谢谢大伙对 Sagit 框架和本人 IT 连创业项目的关注!
来源: http://www.cnblogs.com/cyq1162/p/8057611.html