MNKit - 业务开发中简化属性设置的工具类

made in 小蠢驴的封面

背景:目前的iOS环境,相信大部分的人都还是做的业务开发,一个好的工具类,可以极大的提供开发效率,简化繁琐的设置步骤。接下来,简单介绍一个我在实际开发中抽取出来的工具类 - MNKit

MNButton

业务开发中,UIButton控件应该算最常用的控件之一了,而且它的属性设置还贼麻烦,很多个都是要用 [ set XXX];方法去设置,设置事件(比如点击事件)还要传多个参数- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 所以接下来讲下这个控件怎么设置才能简便使用

//常见方法:
UIButton *btn = [[UIButton alloc]init];
[btn setTitle:@"获取验证码" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor lightGrayColor]];
btn.titleLabel.font = [UIFont systemFontOfSize:14];
[self.view addSubview:btn];
[btn addTarget:self action:@selector(clickSendBtn) forControlEvents:UIControlEventTouchUpInside];

上述代码是UIButton的常见创建方式,设置按钮的标题、字体大小、颜色、背景色、点击事件、添加到父控件等等,基本上每个属性都是要通过[ ] 设置,最麻烦的是经常要通过forState:UIControlStateXXX设置状态

  • MNButton简化上述代码:
//一句代码设置 - 按钮标题 && 颜色 && 字号 && 父试图 && 响应方法
MNButton *sendBtn = [MNButton buttonWithTitle:@"获取验证码"
                                   titleColor:[UIColor orangeColor]
                                     fontSize:[UIFont systemFontOfSize:14]
                              backgroundColor:[UIColor lightGrayColor]
                                   parentView:self.view
                                   targetName:@selector(clickSendBtn)
                                     delegate:self];

这里基本上,button的属性一次性设置就行了,包括target默认是UIControlEventTouchUpInside(点击),传入target的名称就行,这里要切记传的是SEL对象,记得加@selector(xxxName),有了这步设置,这一行代码即可创建拥有上面代码所需要的按钮的基本属性

  • UIButton 除了有文字标题展示的样式之外,也有用image 或者 backgroundImage展示的情况
//一句代码设置 - 按钮背景图片(默认状态) && 父试图 && 响应方法
UIImage *starImage = [UIImage imageNamed:@"Notcollection"];
UIButton *starBtn = [MNButton buttonWithBackgroundImage:starImage
                                             parentView:self.view
                                             targetName:@selector(p_clickStarBtn)
                                               delegate:self];

因为常用的Button设置图片是设置BackgroundImage让他铺满整个button,所以这里的方法传入的属性是BackgroundImage


MNLabel

业务开发中,UIButton控件如果登场率如果不能排在第一,那么比它更常见的非UILabel莫属了,和UIButton一样,UILabel很常见,又经常有许多属性需要设置 - 字体大小、颜色、内容等等

//快速设置内容,文字颜色,字体大小,父控件
[MNLabel mn_labelWithTitle:@"test-label1"
                      font:[UIFont systemFontOfSize:14]
                     color:[UIColor lightGrayColor]
                parentView:self.view];
//设置带行间距的label 
NSString *title2 = @"测试-我是标题2,rua~~~测试-我是标题2,rua~~~测试-我是标题2,rua~~~测试-我是标题2,rua~~~测试-我是标题2,rua~~~测试-我是标题2,rua~~~测试-我是标题2,rua~~~";
CGFloat label2Width = 300;
MNLabel *label2 = [MNLabel mn_labelWithTitle:title2
                                        font:[UIFont systemFontOfSize:14]
                                       color:[UIColor orangeColor]
                                 lineSpacing:4
                                  parentView:self.view];

类似于MNButton,MNLabel也是封装了UILabel的多个属性设置,传入需要设置的这些属性的一句代码即可实现Label所需的多个属性设置(具体其他用法详见Demo)


MNSVProgressClass

这个类是根据项目需求,对SVProgressHUD进行二次封装的,设置完默认的主题(文本颜色、背景色、显隐动画。。。)之后,一行代码即可调用

默认主题设置:

//基础设置 && 多少秒后隐藏
+  (void)setSVDuration:(CGFloat)time{
    
    //设置标题颜色
    [SVProgressHUD setForegroundColor:[UIColor whiteColor]];
    
    //设置背景色
    [SVProgressHUD setBackgroundColor:[UIColor darkGrayColor]];
    
    //n秒后消失
    [SVProgressHUD dismissWithDelay:time];
    
    //消失动画(1S)
    [SVProgressHUD setFadeOutAnimationDuration:1.0];

    //如果响应时间>3s 禁止用户交互
    if(time >= 3){
        [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
    }else{
        [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeNone];
    }
}
  • SVProgress几个细节点
  • 界面是否允许用户交互 : + [setDefaultMaskType: ] 函数设置 。 SVProgressHUDMaskTypeNone - 默认状态,可以交互 。 SVProgressHUDMaskTypeBlack - 不可交互,背景色变黑(iOS7.0+) 。 SVProgressHUDMaskTypeClear - 不可交互,界面颜色不变
  • 提示框如何只显示文字,不显示图片 。[SVProgressHUD showImage:nil status:titleStr]; image参数传空即可
  • 提示框如何设置动画(进场离场) 。进场动画(SV提示框要在界面上显示的时候)+(void)setFadeInAnimationDuration:(NSTimeInterval)duration 。离场动画(SV提示框要在界面上消失的时候 +(void)setFadeOutAnimationDuration:(NSTimeInterval)duration

MNSVProgressClass中,所有带‘number s’方法名的,都是该控件会在number秒后自动消失,如果没带时间的,就是要手动设置[SVProgress dismiss]

  • 这里建议,如果有封装的AFNetworking的工具类的,就在网络请求成功 与 网络请求失败的block中,添加一个[SVProgress dismiss]
  • 如果有封装BaseViewController的,可以统一在- (void)viewWillDisappear:(BOOL)animated- (void)viewWillAppear:(BOOL)animated 方法中,设置[SVProgress dismiss]
  • 因为封装的MNSVProgress是有动画效果,延迟加载的,如果网络请求过快(1s以内就请求成功),可能会导致提示框一直在界面上出现

因为有一些我封装的工具类可能就我们现在这种项目中用得到,如果有需要或者以后迭代过程中可以通过外部参数控制的,我会再继续抽出来,添加到此工具类中,所以如果觉得MNKit对你有用的,能提升你工作效率的欢迎star~ 后期会继续补充~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏清墨_iOS分享

iOS UIStepper实现数量递增递减

很多app都有这样的功能:(大家一看就能懂吧) ? DBF08F90-FB6B-424B-9240-AB893A576065.png 这个功能我们要实现的话,估...

2875
来自专栏陈满iOS

iOS开发验证:取消UITableView的Footer自带的悬停效果

对于继承UITableViewController,如果想更改tableview样式,请重写初始化方法:

852
来自专栏林德熙的博客

win10 uwp 自定义控件 SplitViewItem SplitView 从右划出

本文主要是因为汉堡菜单里面列出的菜单很多重复的图标和文字,我把它作为控件,因为是随便写,可能存在错误,如果发现了,请和我说或关掉浏览器,请不要发不良言论。

492
来自专栏青玉伏案

IOS开发之视图和视图控制器

        视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西。在学习视图这一块的东西的时候,感觉和Java ...

1667
来自专栏一“技”之长

OS X开发:NSProgressIndicator进度指示器控件

    NSProgressIndicator是OS X平台上的活动指示器控件,开发者可以设置圆环样式和进度条样式两种。

661
来自专栏一“技”之长

iOS中UIPopoverController使用详解

        UIPopoverController是Pad设备中常用的一种视图控制器,其在UI表现上为在当前视图控制器上面弹出一个子视图控制器,通常用来展示...

722
来自专栏IT派

Javascript 将 HTML 页面生成 PDF 并下载

最近碰到个需求,需要把当前页面生成 pdf,并下载。弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :)

811
来自专栏谦谦君子修罗刀

iOS导入外部字体

一、将字体文件拖入工程中。 这些字体可以是网上下载的,也可以直接使用系统的字体册。 点击Launchpad-->其他-->字体册,找到你需要的字体,选择在F...

3116
来自专栏互联网杂技

Javascript 将 HTML 页面生成 PDF 并下载

最近碰到个需求,需要把当前页面生成 pdf,并下载。弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :)

1022
来自专栏一“技”之长

Java开发GUI之可编辑区域 原

    Java的awt包中提供了单行的文本编辑组件TextField与多行的文本编辑区TextArea,这两个组件都是继承自TextComponent类。

582

扫码关注云+社区