ios 熱詞或歷史記錄的封裝

對于項(xiàng)目中熱詞以及歷史記錄的需求做個封裝,可動態(tài)添加設(shè)置標(biāo)簽步绸,配置好需要配置的參數(shù)即可奸腺。

熱詞.png

設(shè)置以及初始化方法如下:

@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;//標(biāo)簽內(nèi)間距 (左右各間距)
@property(nonatomic,assign)CGFloat tagsLineSpace;//標(biāo)簽行間距
@property(nonatomic,assign)CGFloat tagsMargin;//標(biāo)簽之間的間距
@property(nonatomic,assign)CGFloat tagSpace;// 整體左右邊距

@property(nonatomic,strong)NSArray *tagsArray; // 文字標(biāo)簽數(shù)組



@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 = @[@"無知安徽噶人噶人家噶加熱機(jī)噶進(jìn)入國阿嘎熱噶人噶熱狗如果",@"風(fēng)云變幻",@"施耐庵",@"唉",@"西門吹雪",@"呵呵噠你沒打答題的啊啊噶而過阿哥人argergaergaergag阿嘎人家居然就噶間距根據(jù)",@"他大舅他二舅都是他就",@"窿窿啦啦",@"火麒麟",@"合歡花",@"暴走大事件",@"非誠勿擾",@"呵呵呵",@"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--- 設(shè)置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;
        //增加個判斷塞绿,當(dāng)字符串過長是惨撇,超過屏幕總寬度- 兩側(cè)間距虐秦,重置標(biāo)簽寬度
        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)];
        
        //判斷是 最后一個標(biāo)簽的時(shí)候保存其高度;
        if (i == _tagsArray.count -1) {
            _totalH = orignVerMargin + btnH +10;
        }
        
        orignHMargin = orignHMargin + btnW +_tagsMargin;
        
    }
    
    //設(shè)置整體高度
     self.height = _totalH;

}
#pragma mark---設(shè)置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---動態(tài)高度---
-(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 地址:熱詞搜索

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碗短,一起剝皮案震驚了整個濱河市受葛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豪椿,老刑警劉巖奔坟,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搭盾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)婉支,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門鸯隅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人向挖,你說我怎么就攤上這事蝌以。” “怎么了何之?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵跟畅,是天一觀的道長。 經(jīng)常有香客問我溶推,道長徊件,這世上最難降的妖魔是什么奸攻? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮虱痕,結(jié)果婚禮上睹耐,老公的妹妹穿的比我還像新娘。我一直安慰自己部翘,他們只是感情好硝训,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著新思,像睡著了一般窖梁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夹囚,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天纵刘,我揣著相機(jī)與錄音,去河邊找鬼崔兴。 笑死彰导,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敲茄。 我是一名探鬼主播位谋,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼堰燎!你這毒婦竟也來了掏父?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤秆剪,失蹤者是張志新(化名)和其女友劉穎赊淑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仅讽,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陶缺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洁灵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饱岸。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徽千,靈堂內(nèi)的尸體忽然破棺而出苫费,到底是詐尸還是另有隱情,我是刑警寧澤双抽,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布百框,位于F島的核電站,受9級特大地震影響牍汹,放射性物質(zhì)發(fā)生泄漏铐维。R本人自食惡果不足惜柬泽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望方椎。 院中可真熱鬧聂抢,春花似錦、人聲如沸棠众。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闸拿。三九已至空盼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間新荤,已是汗流浹背揽趾。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苛骨,地道東北人篱瞎。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像痒芝,于是被迫代替她去往敵國和親俐筋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容