iOS 控件定制封装iOS之封装集成

keyInput实践:实现一个iOS网格密码输入框

2017-05-13  本文已影响643人  FindCrt

项目GitHub地址

先来两张效果图

<img src="http:https://img.haomeiwen.com/i624048/192086ff8ed6f774.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="10%">

多行+紧贴+边框+圆角

开始

前几天朋友问我,怎么实现一个输入框的效果,设计图就是下面这张:

一个输入框

当时觉得挺眼熟的,很多支付APP的支付密码就是这样输入的。

如果总结下,就是当你输入比较少的内容,而又希望整体比较美观的话,就会这样做,因为系统的UITextField会把内容挤在一起。

然后我就来了兴致,准备认真封装下,写一个对于这类输入框的通用控件。所以就有了TFGridInputView

目前的功能

如果设置了不同的样式,那么在输入的时候,可以直观的看到那些事输入的、那些是没输入的,输入位置也会比较醒目。当然这都是可以自由定义的,如果你不需要,可以把三种状态设为一样。

支付宝

使用

项目代码里有详细的各种例子,欢迎直接看代码。这里给出一个简单示例:

//构建一个输入框
    _inputView = [[TFGridInputView alloc] initWithFrame:CGRectMake(30, 120, 100, 200) row:3 column:6];
    
    //构建一个样式,并调整各种格式
    TFGridInputViewCellStyle *style = [[TFGridInputViewCellStyle alloc] init];
    style.backColor = [UIColor colorWithWhite:0.9 alpha:1];
    style.textColor = [UIColor colorWithWhite:0.1 alpha:1];
    
    //如果各个状态样式一致,可以只设置empty状态,它会作为缺省值使用
    [_inputView setStyle:style forState:(TFGridInputViewCellStateEmpty)];
    
    [self.view addSubview:_inputView];
    
    //设置边框和圆角
    _inputView.DIVBorderColor = [UIColor lightGrayColor];
    _inputView.DIVBorderWidth = 0.5;
    
    //设置圆角
    _inputView.DIVCornerRadius = 5;
    
    //设置布局样式
    _inputView.layoutStyle = TFGridInputViewLayoutStyleNoGap;
}

然后就可以使用了,大多数的工作都是在配置样式。

关于布局规则

构建了一个TFGridInputView对象后,给了一个frame,但是可能cell的宽度加上cell之间的间隙会超过frame,比如宽度100,然后一行5个cell,cell宽度30,这样cell本身就占据了150的宽度了。

对于这种情况我的处理是:
cell的大小不变,cell之间间隙使用最小值,然后反过来调整父视图的frame

比如上面的情况,如果间隙是8,那么父视图的宽度会被扩充为:
305 + 8(5+1) = 198。

这么做是因为:

这样既有自由度,也不会麻烦。需要的人需要,不需要的人不需要

欢迎使用,欢迎star



2017.5.15 更新

增加长按复制黏贴的功能

上一篇下一篇

猜你喜欢

热点阅读