ios 热词或历史记录的封装

对于项目中热词以及历史记录的需求做个封装,可动态添加设置标签,配置好需要配置的参数即可。

热词.png

设置以及初始化方法如下:

@interface LXTagsView : UIView

typedef void(^itemClickBlock) (NSInteger index);
-(instancetype)initWithFrame:(CGRect)frame ItemClick:(itemClickBlock)click;

@property(nonatomic,strong)UIFont *btnFont;//先赋值;
@property(nonatomic,assign)CGFloat tagInsetSpace;//标签内间距 (左右各间距)
@property(nonatomic,assign)CGFloat tagsLineSpace;//标签行间距
@property(nonatomic,assign)CGFloat tagsMargin;//标签之间的间距
@property(nonatomic,assign)CGFloat tagSpace;// 整体左右边距

@property(nonatomic,strong)NSArray *tagsArray; // 文字标签数组



@property(nonatomic,assign)CGFloat totalH; //返回总高度

使用方法如下:

LXWS(weakSelf);
    self.tagsView  =[[LXTagsView alloc]initWithFrame:CGRectMake(0, 100, 300, 40) ItemClick:^(NSInteger index) {
        NSLog(@"%ld",index);
        UIViewController *vc =[[UIViewController alloc]init];
        vc.view.backgroundColor = LXRandomColor;
        [weakSelf.navigationController pushViewController:vc animated:YES];
        
    }];
    self.tagsView.btnFont =[UIFont systemFontOfSize:16];
    self.tagsView.tagSpace = 10;
    self.tagsView.tagsMargin = 5;
    self.tagsView.tagInsetSpace = 15;
    self.tagsView.tagsLineSpace =10;
    self.tagsView.tagsArray = @[@"无知安徽噶人噶人家噶加热机噶进入国阿嘎热噶人噶热狗如果",@"风云变幻",@"施耐庵",@"唉",@"西门吹雪",@"呵呵哒你没打答题的啊啊噶而过阿哥人argergaergaergag阿嘎人家居然就噶间距根据",@"他大舅他二舅都是他就",@"窿窿啦啦",@"火麒麟",@"合欢花",@"暴走大事件",@"非诚勿扰",@"呵呵呵",@"miss",@"我爱你",@"thelife",@"永生",@"不忘",@"你",@"爱好个人拉人给哈尔和老公哈拉尔挂了会考",@"爱人噶人更好惹过哈儿噶尔 ",@"爱人杆儿隔热管",@"爱人跟人"];
    
    [self.view addSubview:self.tagsView];

.m如下:

#import "LXTagsView.h"
#import "UIColor+Expanded.h"
@interface LXTagsView()
@property(nonatomic,copy)itemClickBlock itemBlock;
@property(nonatomic,strong)NSMutableArray *tagsFrames;
@end
@implementation LXTagsView

-(instancetype)initWithFrame:(CGRect)frame ItemClick:(itemClickBlock)click{
    self = [super initWithFrame:frame];
    
    if (self) {
        
        self.itemBlock = click;
        
        _tagsLineSpace = 5;
        _tagsMargin = 10;
        _tagInsetSpace = 10;
        _tagSpace = 10;
         _totalH = 0;
    }
    return self;
}


-(void)setTagsArray:(NSArray *)tagsArray{
    
    _tagsArray  = tagsArray;
    
    
    [self configTagsFrames];
    
    [self setupUI];
    
}
#pragma mark--- 设置frame ---
-(void)configTagsFrames{
    
    
    CGFloat orignHMargin = _tagSpace;// 水平方向左边距
    CGFloat orignVerMargin = 5;//上边距参考父视图
    CGFloat btnH = 25;
    _totalH = 0;
    
   
    [self.tagsFrames removeAllObjects];
    
    
    for (int i = 0; i< _tagsArray.count; i++) {
        NSString *string = _tagsArray[i];
        CGFloat btnW = [self stringSizeWithFont:_btnFont string:string height:btnH].width +  2*_tagInsetSpace;
        //增加个判断,当字符串过长是,超过屏幕总宽度- 两侧间距,重置标签宽度
        if (btnW + _tagSpace *2 >= KScreenW) {
            btnW = KScreenW - 2 *_tagSpace;
        }
        if ( orignHMargin + btnW + _tagSpace > KScreenW) {
            orignVerMargin = orignVerMargin + btnH + _tagsLineSpace;
            orignHMargin = _tagSpace;
        }
        
        CGRect frame= CGRectMake(orignHMargin, orignVerMargin, btnW, btnH);
        [self.tagsFrames addObject:NSStringFromCGRect(frame)];
        
        //判断是 最后一个标签的时候保存其高度;
        if (i == _tagsArray.count -1) {
            _totalH = orignVerMargin + btnH +10;
        }
        
        orignHMargin = orignHMargin + btnW +_tagsMargin;
        
    }
    
    //设置整体高度
     self.height = _totalH;

}
#pragma mark---设置UI--
-(void)setupUI{
    
     [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         [obj removeFromSuperview];
     }];
    
    
    for (int i = 0; i< _tagsFrames.count; i++) {
        CGRect frame = CGRectFromString(_tagsFrames[i]);
        
       
        LxButton *button =[LxButton LXButtonWithTitle:_tagsArray[i] titleFont:_btnFont Image:nil backgroundImage:nil backgroundColor:[UIColor hexStringToColor:@"f5f5f5"] titleColor:[UIColor blackColor] frame:frame];
        
        //对于宽度的处理
        if (frame.size.width == KScreenW - 2 *_tagSpace) {
            
            [button setTitleEdgeInsets:UIEdgeInsetsMake(0, _tagInsetSpace, 0, _tagInsetSpace)];
        }
        
        
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:button.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(frame.size.height/2, frame.size.height/2)];
        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
        maskLayer.frame = button.bounds;
        maskLayer.path = maskPath.CGPath;
        button.layer.mask = maskLayer;
        button.buttonID = i;
        
        [button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:button];
    }

    
}

-(void)btnClick:(LxButton *)button
{
    if (_itemBlock) {
        _itemBlock(button.buttonID);
    }
}
-(void)setBtnFont:(UIFont *)btnFont
{
    _btnFont = btnFont;
}
-(void)setTagInsetSpace:(CGFloat)tagInsetSpace
{
    _tagInsetSpace = tagInsetSpace;
}
-(void)setTagsLineSpace:(CGFloat)tagsLineSpace
{
    _tagsLineSpace = tagsLineSpace;
}
-(void)setTagsMargin:(CGFloat)tagsMargin
{
    _tagsMargin = tagsMargin;
}
-(void)setTagSpace:(CGFloat)tagSpace
{
    _tagSpace = tagSpace;
}
-(NSMutableArray *)tagsFrames{
    if (!_tagsFrames) {
        _tagsFrames =[NSMutableArray array];
    }
    return _tagsFrames;
}
#pragma mark---动态高度---
-(CGSize)stringSizeWithFont:(UIFont *)font string:(NSString *)string height:(CGFloat)height
{
    CGRect rect =[string boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, height) options: NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
    return rect.size;
}
@end

热词.gif

demo 地址:热词搜索

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,810评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 冰,不记得这是我们第几次对话 我记得这是我们分开的第一个元旦 不记得第一封信是在哪个课堂上写的 我知道这不是我们最...
    彡七阅读 152评论 0 0
  • 我说,不知道怎么的,一碰到那些很美,很伤感的文字或是音乐,心里就疼疼的,总有会落泪的感觉。 朋友笑,说,想是落到你...
    粲然笑笑阅读 233评论 0 4
  • 小池塘,青衣墙。 夫妻同归,共看绵山长。 最是教人留恋处, 你耕我织,芳草倚斜阳。 时日纵,惜流芳。 花甲白鬓,不...
    书中一粒粟阅读 329评论 0 0