中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS?UISegmentControl如何實現自定義分欄效果

發布時間:2022-03-21 13:33:37 來源:億速云 閱讀:426 作者:小新 欄目:開發技術

小編給大家分享一下iOS UISegmentControl如何實現自定義分欄效果,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體內容如下

iOS?UISegmentControl如何實現自定義分欄效果

iOS 自帶的UISegmentControl實現的就是類似上圖的效果
但是很多用處 一般這兩個分欄是兩個tableView,需要左右滑動來響應分欄

下面來講述這樣的效果是怎么實現的呢?

iOS?UISegmentControl如何實現自定義分欄效果

主要那里有一根短紅線,需要滑動 來切換tableView

先自定義一個SegmentView

.h

//定義block,用來傳遞點擊的第幾個按鈕
typedef void (^PassValueBlock)(NSInteger index);

@interface BCLCommunitySegmentView : UIView

//定義一下block
@property (nonatomic, strong) PassValueBlock returnBlock;
@property (nonatomic, strong) UIImageView *selectImage;//這個就是短紅線

//初始化數組,傳入frame和名稱
- (id) initWithFrame:(CGRect)frame withTitleArray:(NSArray *)array;

//block傳遞值方法
- (void)setReturnBlock:(PassValueBlock)returnBlock;
@end

在SegmentView.m中
循環創建按鈕,幾個分欄創建幾個按鈕

- (void)creatSegmentView {
    //設置按鈕的寬度
    _itemWidth = self.frame.size.width / _itemCounts;
    //循環創建按鈕
    for (int i = 0; i < _itemCounts; i++) {
        UIButton *button  = [[UIButton alloc]initWithFrame:CGRectMake((i + 1) *_itemWidth/2, 0, _itemWidth/2, self.frame.size.height)];
        [self addSubview:button];
        
        //設置button的字
        [button setTitle:_titleArray[i] forState:UIControlStateNormal];
        //設置button的字顏色
        
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        //設置字體大小
        button.titleLabel.font = [UIFont systemFontOfSize:20];
        //設置居中顯示
        button.titleLabel.textAlignment = NSTextAlignmentCenter;
        //設置tag值
        button.tag = 1000 + i;
        //添加點擊事件
        [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
        //如果是第一個,默認被選中
        if (i == 0) {
            button.selected = YES;
        }
    }
    
    
    //添加一個select
    _selectImage = [[UIImageView alloc]initWithFrame:CGRectMake(_itemWidth / 2, self.frame.size.height - 2, _itemWidth / 2, 2)];
    _selectImage.image = [UIImage imageNamed:@"bcl_bg_community_segment_color_line"];
    [self addSubview:_selectImage];
}

然后設置按鈕的點擊事件,將點擊到哪個按鈕 回調過去

-(void)buttonAction:(UIButton *)button{
    
    //當button被點擊,所有的button都設為未選中狀態
    for (UIView *view in self.subviews) {
        if ([view isKindOfClass:[UIButton class]]) {
            UIButton *subButton = (UIButton*)view;
            subButton.selected = NO;
            subButton.titleLabel.font = [UIFont systemFontOfSize:20];
        }
    }
    //然后將選中的這個button變為選中狀態
    button.selected = YES;
    
    //通過當前的tag值設置select的位置
    NSInteger index = button.tag - 1000;
    [UIView animateWithDuration:0.3 animations:^{
        self->_selectImage.frame = CGRectMake((1 + index)*_itemWidth/2, _selectImage.frame.origin.y, self->_selectImage.frame.size.width, _selectImage.frame.size.height);
    }];
    
    _returnBlock(index);
}

在需要展現的controller中

.h

@interface BCLCommunityView : UIView

@property (nonatomic, strong) UIScrollView *scrollerView;
@property(nonatomic ,strong) UITableView *circleTableView;
@property(nonatomic ,strong) UITableView *squreTableView;
@property (nonatomic, strong)BCLCommunitySegmentView *segmentView;

@end

在.m中用scrollView實現分欄的兩個tableView的滑動

- (instancetype) initWithFrame:(CGRect)frame {
    if(self = [super initWithFrame:frame]) {
        [self setSegmentView];
        
        _circleTableView = [self loadTableView];
        _squreTableView = [self loadTableView];
        
        _circleTableView.tag = 1;
        _squreTableView.tag = 2;
        
        _scrollerView = [[UIScrollView alloc] init];
        _scrollerView.frame = CGRectMake(0, 104, KScreenW, KScreenH);
        _scrollerView.pagingEnabled = YES;
        _scrollerView.scrollEnabled = YES;
        _scrollerView.contentSize = CGSizeMake(KScreenW * 2, KScreenH);
        _scrollerView.bounces = YES;
        _scrollerView.delegate = self;
        
        [_scrollerView addSubview:_circleTableView];
        [_scrollerView addSubview:_squreTableView];
        
        _circleTableView.frame = CGRectMake(0, 0, KScreenW, KScreenH);
        _squreTableView.frame = CGRectMake(KScreenW, 0, KScreenW, KScreenH);
        [self addSubview:_scrollerView];
    }
    return self;
}
- (UITableView *)loadTableView
{
    UITableView  *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, KScreenW, KScreenH) style:UITableViewStyleGrouped];
    tableView.showsVerticalScrollIndicator = NO;
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
    
    tableView.dataSource = self;
    
    [self addSubview:tableView];
    return tableView;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    if(tableView.tag == 1) {
        return 3;
    } else {
         return 2;
    }
   
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(tableView.tag == 1) {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
        if(!cell) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
            
        }
        cell.backgroundColor = [UIColor redColor];
        
        cell.textLabel.text = @"11111";
        return cell;
    } else {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
        if(!cell) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
        }
        return cell;
    }
    
}

scrollView代理 滑動scrollerView實現小紅條的滑動

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    CGRect frame = _segmentView.selectImage.frame;
    if(scrollView.contentOffset.x / KScreenW == 0) {
        [UIView animateWithDuration:0.1 animations:^{
        _segmentView.selectImage.frame = CGRectMake(KScreenW / 4, frame.origin.y, frame.size.width, frame.size.height);
        }];
    } else if(scrollView.contentOffset.x / KScreenW == 1){
        [UIView animateWithDuration:0.1 animations:^{
            _segmentView.selectImage.frame = CGRectMake(KScreenW / 2, frame.origin.y, frame.size.width, frame.size.height);
        }];
    }
}

以上是“iOS UISegmentControl如何實現自定義分欄效果”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芜湖县| 台江县| 铁岭市| 吉隆县| 牙克石市| 天等县| 栖霞市| 崇左市| 广水市| 清涧县| 双峰县| 金秀| 阆中市| 开化县| 海林市| 庆城县| 淮南市| 咸丰县| 乐至县| 邮箱| 庆安县| 随州市| 德江县| 丘北县| 巍山| 崇文区| 土默特左旗| 三亚市| 岗巴县| 荔波县| 揭阳市| 都匀市| 县级市| 邹平县| 浮梁县| 五台县| 津南区| 苍溪县| 丰城市| 吴忠市| 项城市|