UISegmentedControl+UIScrollView制

作者: 今晚月色 | 来源:发表于2018-08-24 10:49 被阅读97次
示例图.png

利用原生的UISegmentedControl和UIScrollView组合绘制这样的页面。
可能不是很好的做法。
代码如下

#import "ViewController.h"
// 示例Controller
#import "TestViewController.h"
#import "TestTableViewController.h"

#define SEG_SCREEN_WIDTH UIScreen.mainScreen.bounds.size.width

@interface ViewController ()<UIScrollViewDelegate>

@property (nonatomic, strong) UISegmentedControl *segmentedControl;
@property (nonatomic, strong) NSArray *titleArray;
@property (nonatomic, strong) NSMutableArray *vcArray;
@property (nonatomic, strong) UIScrollView *scrollView;

@end

@implementation ViewController

#pragma mark =============== Getter && Setter ===============
- (UISegmentedControl *)segmentedControl {
    if (!_segmentedControl) {
        _segmentedControl = [[UISegmentedControl alloc] initWithItems:self.titleArray];
        // 默认选择第一个
        _segmentedControl.selectedSegmentIndex = 0;
        // 隐藏自带的边框
        _segmentedControl.tintColor = UIColor.clearColor;
        NSDictionary *selectedDic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], NSForegroundColorAttributeName,[UIFont systemFontOfSize:20],NSFontAttributeName,nil];
        [_segmentedControl setTitleTextAttributes:selectedDic forState:UIControlStateSelected];
        NSDictionary *normalDic = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor],NSForegroundColorAttributeName,[UIFont systemFontOfSize:15],NSFontAttributeName,nil];
        [_segmentedControl setTitleTextAttributes:normalDic forState:UIControlStateNormal];
        // 添加点击事件
        [_segmentedControl addTarget:self action:@selector(segmentedControlChange:) forControlEvents:UIControlEventValueChanged];
    }
    return _segmentedControl;
}

- (UIScrollView *)scrollView {
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc] init];
        _scrollView.delegate = self;
        _scrollView.frame = self.view.frame;
        _scrollView.pagingEnabled = true;
        _scrollView.showsHorizontalScrollIndicator = false;
        _scrollView.contentSize = CGSizeMake(SEG_SCREEN_WIDTH * self.titleArray.count, 0);
        // 默认加载第一个VC视图
        UIViewController *vc = self.vcArray[0];
        [self.scrollView addSubview:vc.view];
    }
    return _scrollView;
}

#pragma mark =============== LifeCycle ===============
- (void)viewDidLoad {
    [super viewDidLoad];
    [self initData];
    
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)]){
        self.edgesForExtendedLayout = UIRectEdgeNone;
    }
    
    [self.navigationItem setTitleView:self.segmentedControl];
    [self.view addSubview:self.scrollView];
}

#pragma mark =============== 加载默认数据 ===============
- (void)initData {
    self.titleArray = @[@"我的",@"音乐馆",@"发现"];
    
    NSArray *vArray = @[@"TestViewController",@"TestTableViewController",@"TestViewController"];
    
    self.vcArray = [NSMutableArray array];
    for (int i = 0; i < vArray.count; i++) {
        Class class = NSClassFromString(vArray[I]);
        UIViewController *vc = [[class alloc] init];
        vc.view.frame = CGRectMake(SEG_SCREEN_WIDTH * i, 0, SEG_SCREEN_WIDTH, self.view.frame.size.height);
        [self.vcArray addObject:vc];
    }
}

#pragma mark =============== UISegmentedControl点击事件 ===============
- (void)segmentedControlChange:(UISegmentedControl *)sgementControl {    
    UIViewController *vc = self.vcArray[sgementControl.selectedSegmentIndex];
    [self.scrollView addSubview:vc.view];
    self.scrollView.contentOffset = CGPointMake(SEG_SCREEN_WIDTH * sgementControl.selectedSegmentIndex, 0);
}

#pragma mark =============== UIScrollViewDelegate ===============
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat contentOffsetX = scrollView.contentOffset.x;
    NSInteger index = contentOffsetX/SEG_SCREEN_WIDTH;
    UIViewController *vc = self.vcArray[index];
    [self.scrollView addSubview:vc.view];
    self.segmentedControl.selectedSegmentIndex = index;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

效果图


效果图.gif

Demo地址
https://github.com/wudan-ios/UISegmentedControl-UIScrollView.git

相关文章

  • UISegmentedControl+UIScrollView制

    利用原生的UISegmentedControl和UIScrollView组合绘制这样的页面。可能不是很好的做法。代...

  • 2018-04-19

    怒制思、思制恐、恐制喜、喜制悲、悲制怒

  • 制怒制怒

    昨天,再一次因愤怒而伤害了身边的亲人,下决心改变这种因无法控制情绪而瞬间的暴怒,调整好心态好好生活。 我一直很奇怪...

  • 2020-03-09制用做功的具体方法

    制用做功的具体方法(合制、沖 制、刑制、克制、穿制 制用结构中看效率高低是辨别四柱富贵等级的 重要依据。本节...

  • 晋商文化之创新精神.

    1.无论“独资制—贷金制—朋合制—伙计制—股份制”的企业组织制度变迁,还是会馆—行会—公所—商会”的组织形态变迁,...

  • 拒绝臭臭,卫生间反味如何彻底清除!

    制味要制根本

  • 其实我是想成为让你们骄傲的人 可是这分不安感我若不赶紧处理好我与他们一般无二

  • 制 何为制 第4调性 构建 为我 为我们 诠释了 新可能 当我们提供可能性 当我们再进一步提供x 这就是制 对于制...

  • 货币制度的历史演变二

    金本位制:包括金币本位制、金块本位制和金汇兑本位制三种形态。(注意比较三者不同) 金币本位制特点(名词):...

  • 图言卡语分社-【模仿练习】02-导图卡片实验原则100条

    【制卡时间】2020-6-07 【制卡】模仿练习 【制卡时间】 15分钟 【制卡小感言】 今天的制卡时间会比较短,...

网友评论

本文标题:UISegmentedControl+UIScrollView制

本文链接:https://www.haomeiwen.com/subject/erhbiftx.html