iOS实现简单分栏效果

2022-10-07,,,

本文实例为大家分享了ios实现简单分栏效果的具体代码,供大家参考,具体内容如下

直接贴代码喽

gmsubfieldviiew.h

#import <uikit/uikit.h>

@interface gmsubfieldviiew : uiview

/**
 * select index
 */
@property(nonatomic,copy) void(^clickindex)(nsinteger index);

- (instancetype)initwithframe:(cgrect)frame titles:(nsarray *)thititles;

/**
 *  默认勾选
 */
@property(nonatomic,assign) nsinteger selectedindex;

@end

gmsubfieldviiew.m

#import "gmsubfieldviiew.h"

#define lineh 2
@interface gmsubfieldviiew ()
/**
 *  titles
 */
@property(nonatomic,strong) nsarray * titles;
/**
 *  lineview
 */
@property(nonatomic,weak) uiview *lineview;
/**
 *  itemwidth
 */
@property(nonatomic,assign) cgfloat itemwidth;
@end

@implementation gmsubfieldviiew


#pragma mark - initui
- (instancetype)initwithframe:(cgrect)frame titles:(nsarray *)thititles
{
    if (self = [super initwithframe:frame]) {
        self.titles = thititles;
        //initsubviews
        [self initsubviews];
    }
    return self;
}

#pragma mark - action
- (void) initsubviews
{
    self.itemwidth = kscreen_width/self.titles.count;
    //add child
    for (int i=0; i<self.titles.count; i++) {
        uibutton *btn = [uibutton buttonwithtype:uibuttontypecustom];
        [btn settitle:self.titles[i] forstate:uicontrolstatenormal];
        btn.titlelabel.font = fontsize(15);
        btn.tag  = 100+i;
        btn.layer.borderwidth = 0.5;
        [btn settitlecolor:[uicolor blackcolor] forstate:uicontrolstatenormal];
        btn.layer.bordercolor = [uicolor lightgraycolor].cgcolor;
        [btn addtarget:self action:@selector(btnclick:) forcontrolevents:uicontroleventtouchupinside];
        [self addsubview:btn];
    }

    //添加下划线
    uiview *lineview  = [[uiview alloc]init];
    lineview.backgroundcolor = [uicolor blackcolor];
    [self addsubview:lineview];
    self.lineview     = lineview;
}

- (void)layoutsubviews
{
    [super layoutsubviews];

    for (int i=0; i<self.titles.count; i++) {
        uibutton *btn = [self viewwithtag:100+i];
        btn.frame = cgrectmake(i*self.itemwidth, 0, self.itemwidth, self.bounds.size.height-lineh+1);
    }
    self.lineview.frame = cgrectmake(self.selectedindex*self.itemwidth, self.bounds.size.height-lineh, self.itemwidth, lineh);
}


- (void) btnclick:(uibutton *)btn
{
    nsinteger index = btn.tag -100;
    esweakself
    [uiview animatewithduration:0.2 animations:^{
        esstrongself
        self.lineview.frame = cgrectmake(index*self.itemwidth, self.bounds.size.height-lineh, self.itemwidth, lineh);
    }];
    if (self.clickindex) {
        self.clickindex(index);
    }
}

/*
// only override drawrect: if you perform custom drawing.
// an empty implementation adversely affects performance during animation.
- (void)drawrect:(cgrect)rect {
    // drawing code
}
*/

@end

调用:

gmsubfieldviiew *segview = [[gmsubfieldviiew alloc]initwithframe:cgrectmake(0, 10, kscreen_width, segh) titles:@[@"未还",@"已还"]];
    segview.selectedindex = 1;
    esweakself
    segview.clickindex = ^(nsinteger index){
        self.ishk = no;
        esstrongself
        if(index==0){
            //未还
            self.rightbutton.hidden = no;
        }
        else if(index==1){
           //已还
            self.rightbutton.hidden = yes;
            self.containview.hidden = yes;
        }
        self.tableview.frame = cgrectmake(0, 60, kscreen_width, kscreen_height-navheight-60);
        [self.tableview reloaddata];
    };
   [self.view addsubview:segview];

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《iOS实现简单分栏效果.doc》

下载本文的Word格式文档,以方便收藏与打印。