昨天刚写了一篇IT连创业的文章:IT连创业系列:产品设计之答题模块,(欢迎大伙关注!)

感觉好久没写IOS的文章了,今天趁机,来补一篇,Sagit的教程。

Sagit 开源地址:https://github.com/cyq1162/Sagit

今天主要是分享消息弹窗功能,即STMsgBox的用法:

STMsgBox为弹窗相关的功能的源码。

早期的弹窗,曾经引用了MBProgressHUD;

后来,去掉了,并重写了里面所有的代码。

目前对外调用的API:

  1. typedef BOOL (^OnConfirmClick)(NSInteger btnIndex,UIAlertView* view);
  2. typedef BOOL (^OnBeforeDialogHide)(UIView* winView,UIView* clickView);
  3. typedef void (^OnBeforeShow)(UIAlertView* view);
  4. typedef void (^OnDialogShow)(UIView* winView);
  5. //!提供基础的消息弹窗
  6. @interface STMsgBox : NSObject
  7. + (STMsgBox*)share;
  8. #pragma AlertView
  9. //!提示消息
  10. -(void)prompt:(id)msg;
  11. -(void)prompt:(id)msg second:(NSInteger)second;
  12. //!弹出需要点击确定的消息框
  13. -(void)alert:(id)msg;
  14. -(void)alert:(id)msg title:(NSString*)title;
  15. -(void)alert:(id)msg title:(NSString *)title okText:(NSString*)okText;
  16. -(void)loading;
  17. -(void)loading:(id)text;
  18. -(void)hideLoading;
  19. //!弹出需要确认,并可执行事件的消息框。
  20. -(void)confirm:(id)msg title:(NSString*)title click:(OnConfirmClick)click;
  21. -(void)confirm:(id)msg title:(NSString *)title click:(OnConfirmClick)click okText:(NSString*)okText;
  22. -(void)confirm:(id)msg title:(NSString *)title click:(OnConfirmClick)click okText:(NSString*)okText cancelText:(NSString*)cancelText;
  23. //!弹出一个可以(自定义)输入内容的对话框
  24. -(void)input:(id)title before:(OnBeforeShow)beforeShow click:(OnConfirmClick)click okText:(NSString*)okText cancelText:(NSString*)cancelText;
  25. //!弹出自定义界面的对话框
  26. - (void)dialog:(OnDialogShow)dialog;
  27. - (void)dialog:(OnDialogShow)dialog beforeHide:(OnBeforeDialogHide) beforeHide;
  28. @end

对于该类的调用方式,有两种

STController这个基类,默认实现的有两个子类接口(msgBox:消息弹窗、http:网络请求)

例如:

  1. [self.msgBox prompt:@"不能为空!"];

Sagit,是一个总类库的起始名称空间,很多常用功能,都是由Sagit打开头开始,后续会单独介绍。

例如:

  1. [Sagit.MsgBox prompt:@"加入黑名单成功!"];

下面,会和大伙分享 IT连App 中,应用到该相关的代码:

  1. -(void)onRightNavBarClick:(UIBarButtonItem *)view
  2. {
  3. if(![self isMatch:@"发布内容" name:@"topic"])
  4. {
  5. return;
  6. }
  7. NSString *jsonStr = [@{@"TopicContent":STValue(@"topic"),@"photos":self.photos} toJson];
  8. [self.http post:UrlTopicSet paras:@{@"topic":jsonStr} success:^(STModel *result) {
  9. if (result.success == YES)
  10. {
  11. [self.msgBox prompt:@"发布成功!"];
  12. [self.preController reloadData];
  13. [self stPop];
  14. }
  15. else
  16. {
  17. [self.msgBox prompt:result.msg];
  18. }
  19. }];
  20. }

效果:

 

  1. -(void)initUI
  2. {
  3. [super initUI];
  4. [self loadScreenUI];
  5. //禁止用户自定义图片,显示为用户设置的穿透图片
  6. self.userPhotos=nil;
  7. self.showSecond=2;
  8. //读取设置的图片
  9. self.penPhotos=Sagit.Magic.Setting.penPhotos;
  10. if(!self.penPhotos || self.penPhotos.count==0)
  11. {
  12. [self.msgBox alert:@"请先在参数设置里设置穿透照片!" title:@"消息提示" okText:@"我知道了"];
  13. [self stPop];
  14. return;
  15. }
  16. [self ready];
  17. }

提示效果:

  1. -(UIImageView*)save
  2. {
  3. [Sagit.MsgBox confirm:@"是否保存图片?" title:@"消息提示" click:^BOOL(NSInteger isOK,UIAlertView* view) {
  4. if(isOK>0)
  5. {
  6. [self.image save:^(NSError *err) {
  7. [Sagit.MsgBox prompt:!err?@"保存成功":@"保存失败:保存照片权限被拒绝,您需要重新设置才能保存!"];
  8. }];
  9. }
  10. return YES;
  11. }];
  12. return self;
  13. }

提示效果:

 

  1. -(void)updatePassword:(UITableViewCell*)cell
  2. {
  3. [[cell.textLabel text:@"修改密码"] onClick:^(id view) {
  4. [self.msgBox input:@"修改密码" before:^(UIAlertView *view) {
  5. view.alertViewStyle=UIAlertViewStyleSecureTextInput;
  6. [[view textFieldAtIndex:0] keyboardType:UIKeyboardTypeNumbersAndPunctuation];
  7. } click:^BOOL(NSInteger isOK, UIAlertView *view) {
  8. if(isOK>0)
  9. {
  10. UITextField *text=[view textFieldAtIndex:0];
  11. if (![self isMatch:@"密码,格式为6-16位数字或字母" value:text.text regex:RexPassword])
  12. {
  13. return NO;
  14. }
  15. [self.http post:UrlChangePwd paras:@{@"Password":text.text} success:^(STModel *result) {
  16. if (result.success) {
  17. [self.msgBox prompt:@"密码修改成功"];
  18. Sagit.Global.Token=(NSString *)result.msg;
  19. }else {
  20. [self.msgBox prompt:@"密码修改失败"];
  21. }
  22. }];
  23. }
  24. return YES;
  25. } okText:@"确认密码" cancelText:@"取消"];
  26. }];
  27. }

效果:

  1. - (void)show:(ShareModel*)model after:(OnAfterShare)after beforeViewHide:(OnBeforeDialogHide)onBeforeViewHide
  2. {
  3. [Sagit.MsgBox dialog:^(UIView *winView) {
  4. [[[[[winView addUIView:nil] width:1 height:362] backgroundColor:DeviceColor] relate:Bottom v:0] block:nil on:^(UIView* sView)
  5. {
  6. NSArray *shareImageArray = @[@"wechat2", @"wechat", @"qq", @"qq2"];
  7. NSArray *shareTitleArray = @[@"微信好友", @"微信朋友圈", @"QQ好友", @"QQ空间"];
  8. for (int i = 0; i < shareImageArray.count; i ++)
  9. {
  10. UIImageView *imgView= [[[[sView addImageView:nil img:shareImageArray[i]] width:126 height:126] relate:LeftTop v:(126+36)*i+72 v2:50] onClick:^(id view) {
  11. model.To=(ShareTo)i;
  12. [self send:model after:after];
  13. [winView click];//隐藏界面
  14. }];
  15. [[[[[sView addLabel:nil text:shareTitleArray[i] font:24 color:@"#555555"] textAlignment:NSTextAlignmentCenter] width:126] onBottom:imgView y:22] onClick:^(id view) {
  16. [imgView click];
  17. }];
  18. }
  19. [[[[[sView addUIView:nil] backgroundColor:ColorWhite] width:1 height:98]relate:Bottom v:0] block:nil on:^(UIView* cancelView) {
  20. [[cancelView addLabel:nil text:@"取消" font:32 color:ColorBlack] toCenter];
  21. }];
  22. }];
  23. } beforeHide:onBeforeViewHide];
  24. }

效果:

  1. - (void)show:(NSString*)type
  2. {
  3. [Sagit.MsgBox dialog:^(UIView *winView) {
  4. [[[[winView addImageView:nil img:@"answer_pop"] width:1 height:814] toCenter] block:nil on:^(UIImageView *cView) {
  5. //初级
  6. [[[[cView addUIView:@"level1"] width:140 height:62] relate:LeftTop v:216 v2:344] onClick:^(UIView* view) {
  7. [self showAnswerStart:winView questionType:type dificulty:@"1"];
  8. }];
  9. //中级
  10. [[[[cView addUIView:@"level2"] width:140 height:62] onRight:@"level1" x:42 ]onClick:^(UIView* view) {
  11. [self showAnswerStart:winView questionType:type dificulty:@"2"];
  12. }];
  13. //高级
  14. [[[[[cView addUIView:@"level3"] width:140 height:62] onBottom:@"level2" y:60] toCenter:X] onClick:^(UIView* view) {
  15. [self showAnswerStart:winView questionType:type dificulty:@"3"];
  16. }];
  17. //我要出题
  18. [[[[cView addUIView:@"level4"] width:154 height:154] relate:LeftTop v:435 v2:538] onClick:^(UIView* view) {
  19. [winView click];
  20. ITWebViewController *wv=[ITWebViewController new];
  21. NSString *url=[[UrlQuestionPost replace:@"{uid}" with:Sagit.Global.UserID] replace:@"{qt}" with:type];
  22. [wv loadUrl:url];
  23. NSString *qtName=[Sagit.Global getConfigKey:@"答题类型" value:type];
  24. wv.defaultTitle=STString(@"我要出题: %@",qtName);
  25. wv.denyChangeTitle=YES;
  26. [self stPush:wv];
  27. }];
  28. }];
  29. }];
  30. }
  31. -(void)showAnswerStart:(UIView*)view questionType:(NSString*)type dificulty:(NSString*)dificulty
  32. {
  33. AnswerModel *model=[AnswerModel new];
  34. model.Score=0;
  35. model.StartTime=[NSDate.beiJinDate toString];
  36. model.AnswerCount=1;
  37. model.QuestionType=type.integerValue;
  38. model.QuestionDifficulty=dificulty.integerValue;
  39. UIViewController *con=[STNew(@"AnswerStart") key:@"answerModel" value:model] ;
  40. [self stPush:con title:nil img:nil];
  41. [view click];
  42. }

效果:

本篇虽然介绍的是消息弹窗,但分享的代码,都是IT连里完整的功能模块了。

认真扫代码,就能发现用Sagit框架写代码是简洁的不要不要的了。

Sagit框架,让IOS开发更简单,你值的拥有!!!

版权声明:本文为cyq1162原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cyq1162/p/8657965.html