UISegmentControl分段控制器与ScrollView和TableView进行TableView的切换

先看效果图
每点击一个整个scrollView就会滑动到相应的位置,出现相应的tableView,然后用鼠标滑动scrollView时,上面的控制器也会跟着变化
在这里插入图片描述
在这里插入图片描述

  • taleView在ScrollView上布局,画布的大小是三个屏幕的大小,在画布上添加三个tableView
  • 用分段控制器控制滑动
  • 监听scrollview的滑动。分段控制器作出响应

look代码

//初始化scrollView,并设置其属性
	_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    _scrollView.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width * 3, [UIScreen mainScreen].bounds.size.height);
    _scrollView.pagingEnabled = YES;
    _scrollView.bounces = NO;
    _scrollView.bouncesZoom = NO;
    _scrollView.alwaysBounceVertical = NO;
    _scrollView.alwaysBounceHorizontal = NO;
    _scrollView.scrollEnabled = YES;
    _scrollView.delegate = self;入代码片
	[self.view addSubview:_scrollView];


    _tableView1.delegate = self;
    _tableView1.dataSource = self;
    _tableView2.delegate = self;
    _tableView2.dataSource = self;
    _tableView3.delegate = self;
    _tableView3.dataSource = self;
    
	//初始化tableView,设置其属性
    _tableView1 = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 600)];
    _tableView2 = [[UITableView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width * 1, 0, [UIScreen mainScreen].bounds.size.width, 600)];
    _tableView3 = [[UITableView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width * 2, 0, [UIScreen mainScreen].bounds.size.width, 600)];
    
    //设置tag值进行区分
    _tableView1.tag = 1;
    _tableView2.tag = 2;
    _tableView3.tag = 3;
    
    [_tableView1 registerClass:[ZWYTableViewCell5 class] forCellReuseIdentifier:@"tab1Cell"];
    
    
    [_tableView2 registerClass:[ZWYTableViewCell5 class] forCellReuseIdentifier:@"tab2Cell"];
    
    
    [_tableView3 registerClass:[ZWYTableViewCell5 class] forCellReuseIdentifier:@"tab3Cell"];
    
    [_scrollView addSubview:_tableView1];
    [_scrollView addSubview:_tableView2];
    [_scrollView addSubview:_tableView3];
    
    _array = @[@"精选文章", @"热门推荐", @"全部文章"];
    
    //初始化分段控制器,设置相应属性
    _segment = [[UISegmentedControl alloc] initWithItems:_array];
    _segment.frame = CGRectMake(0, 60, self.view.frame.size.width, 40);
    //设置标题和边框的颜色
    _segment.tintColor = [UIColor whiteColor];
    _segment.momentary = NO;
    //设置初始选中值,默认为没有选中
    _segment.selectedSegmentIndex = 0;
    [_segment setBackgroundImage:[UIImage imageNamed:@"essay_background.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
   //设置未被选中的状态
    [_segment setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateSelected];
   //设置选中的状态
    [_segment setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor grayColor]} forState:UIControlStateNormal];
    [self.view addSubview:_segment];、
    //添加选择点击事件
    [_segment addTarget:self action:@selector(roll ) forControlEvents:UIControlEventValueChanged];

//使分段控制器控制滑动
-(void)roll   {
    switch (_segment.selectedSegmentIndex) {
        case 0:
            [_scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
            break;
        case 1:
            [_scrollView setContentOffset:CGPointMake(414, 0) animated:YES];
            break;
        case 2:
            [_scrollView setContentOffset:CGPointMake([UIScreen mainScreen].bounds.size.width * 2, 0) animated:YES];
            break;
        default:
            break;
    }
}

//监听scrollView的滑动
//这里我用的是属性_scrollView,如果用的是,scrollView,要和tableView进行区别,因为,tableView是scrollView的子类,用tag值进行区分
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if(_scrollView.contentOffset.x == 0) {
        _segment.selectedSegmentIndex = 0;
    }
    if (_scrollView.contentOffset.x == [UIScreen mainScreen].bounds.size.width ) {
        _segment.selectedSegmentIndex = 1;
    }
    if (_scrollView.contentOffset.x == [UIScreen mainScreen].bounds.size.width * 2) {
         _segment.selectedSegmentIndex = 2;
    }
}

然后就好了!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可自定义样式、功能全面的分段控件。项目地址:https://github.com/klongmitre/android-segmented-control-view效果图:如何使用xml中直接创建<org.mitre.ascv.AndroidSegmentedControlView         android:id="@ id/androidSegmentedControlView"         android:layout_width="match_parent"         android:layout_height="wrap_content"         ascv:ascv_defaultSelection="0"         ascv:ascv_unselectedTextColor="@color/test_attr_unselected_text_color"         ascv:ascv_selectedTextColor="@color/test_attr_selected_text_color"         ascv:ascv_selectedColor="@color/test_attr_selected_color"         ascv:ascv_unselectedColor="@color/test_attr_unselected_color"         ascv:ascv_items="@array/three_state_option"/>2. java中添加监听器,监听item的切换ascv = (AndroidSegmentedControlView)this.findViewById(R.id.androidSegmentedControlView); ascv.setIdentifier("ascv01"); //ascv.setItems(new String[]{"Test1aaaaa", "Test2", "Test3"}, new String[]{"1", "2", "3"}); ascv.setOnSelectionChangedListener(new OnSelectionChangedListener(){     @Override     public void newSelection(String identifier, String value) {//当item切换时触发  Toast.makeText(MainActivity.this, "identifier:" identifier "  value:" value, Toast.LENGTH_SHORT).show();     } });参数identifier是当有多个分段控件时,同时使用一个监听器时,用于区别是哪个触发了事件。属性说明属性名类型使用说明ascv_unselectedTextColorreference未选中的item的文字颜色ascv_unselectedColorreference未选中的item的背景颜色,不包括边框ascv_selectedColorreference选中的item背景的颜色以及边框的颜色ascv_selectedTextColorreference选中的item的文字颜色ascv_itemsreference控件item上显示的文字ascv_valuesreference控件item的值,会被传给监听器。未设置时,默认使用ascv_items。ascv_equalWidthboolean当item上的文字,即ascv_items设置的文字,长度不一致时,item的宽度是否还等长。ascv_stretchboolean是否被拉伸。即控件是否填充整个父容器。ascv_defaultSelectioninteger默认哪个item被选中,下标从0开始ascv_identifierstring控件的ID

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值