登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

简单实用的选择伸展视图

[复制链接]
来自: 秦桥村委会 分类: iOS精品源码 上传时间: 2017-8-30 14:31:17
Tag:

项目介绍:

两年前写的一个古诗软件里面的选择器,闲着没什么事,想着在code4App里面看了别人代码看了两年,自己也传一个试试。手里还有一些值得分享的东西,稍后再继续吧。

GitHub下载地址

Controller类里面没什么东西,就是根据view选择的内容,加载不同的数据,然后就是改变需要显示列表的View的frame的变化。

    _headView=[[SXSearchHeadView alloc]initWithFrame:CGRectMake(0, 0,ScreenWidth, 40*almightyHeight) andDataSource:Arr];

    __weak SXMainViewController *vc=self;

    //接受点击button时的下标

    _headView.titleBlock=^(NSInteger index){

        [vc showOrHiddenWhenTheValueChanged:index];

    };

    //接收点击cell时的消息

    //当headView的cell被点击时,收回tableView

    __weak SXSearchHeadView *view=_headView;

    _headView.selectBlock=^(NSString *str){

        [UIView animateWithDuration:.6 animations:^{

            float height=40*almightyHeight;

            CGRect rect=view.frame;

            rect.size.height=height;

            view.frame=rect;

        }];

        [vc showInfoWithDynasty:view.dynastyButton.currentTitle andPeomType:view.dataButton.currentTitle andForm:view.formButton.currentTitle];

    };

    [self.view addSubview:_headView];

}

//选择完成之后调用

  • (void)showInfoWithDynasty:(NSString )dynasty andPeomType:(NSString )type andForm:(NSString *)form{

    self.navigationItem.title = [NSString stringWithFormat:@"%@%@的%@",dynasty,type,form];

}

主要的东西还是在view类里面。

//开始选择

-(void)beginToSearch:(UIButton *)sender{

//    因为有的三个字有的两个字,要调整一下内间距,有一个根据字体大小获得文本长度的方法,有兴趣的可以找一下,我比较懒

    [self changeFrameOfButton:sender];

    _currentTag=sender.tag;

    //如果两次点击是同一次button

    if (_selectIndex==sender.tag) {

        _selectIndex=0;

        //并且这个tableView‘是打开状态的

        if (_isForming||_isDybasting||_isDataing) {

            //封装方法,让其关闭

            [self restorationForButtonImageView];

        }else{

            //如果不是开启状态,打开tableView并显示你所点击的button对应的内容

            [self change:sender.tag];

        }

    }else{

        //如果两次点击的不是同一个button,打开tableView并显示你所点击的button对应的内容

        [self change:sender.tag];

    }

    //最后,将你所点击的button的下标block传给控制器

    if (_titleBlock) {

        _titleBlock(self.selectIndex);

    }

    //点击之后刷新tableView 以刷新button对应的内容

    [self.searchTableView reloadData];

//    [self.searchTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];

}

//如果两次点击的不是同一个Button或者点击的是同一个button‘ 但是两次点击的时候tableView都处于关闭状态的时候------调用此方法 。

//有点难讲,这个状态比较少触发,可以打个断点多玩玩

-(void)change:(NSInteger)num{

    //既然是要打开,点击的button的下标赋给_selectIndex 以便后面block传给控制器

    _selectIndex=num;

    //根据点击不同的button,将其设置为选中状态,打开状态开启,图片旋转,其他的都取消掉

    if (num==100) {

        [UIView animateWithDuration:.25 animations:^{

            _dataButton.selected=YES;

            _dynastyButton.selected=NO;

            _formButton.selected=NO;

//            点击到的按钮图片旋转,其他的都返回原样

            _dataButton.imageView.transform=CGAffineTransformMakeRotation(M_PI);

            _dynastyButton.imageView.transform=CGAffineTransformIdentity;

            _formButton.imageView.transform=CGAffineTransformIdentity;

            //设置button的image

            [_dataButton setImage:[UIImage imageNamed:@"upblack"] forState:(UIControlStateNormal)];

            [_dynastyButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

            [_formButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

        }];

        _isDataing=YES;

        _isForming=NO;

        _isDybasting=NO;

    }else if (_currentTag==101){

        [UIView animateWithDuration:.25 animations:^{

            _dynastyButton.selected=YES;

            _dataButton.selected=NO;

            _formButton.selected=NO;

            _dataButton.imageView.transform=CGAffineTransformIdentity;

            _dynastyButton.imageView.transform=CGAffineTransformMakeRotation(M_PI);

            _formButton.imageView.transform=CGAffineTransformIdentity;

            //设置button的image

            [_dataButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

            [_dynastyButton setImage:[UIImage imageNamed:@"upblack"] forState:(UIControlStateNormal)];

            [_formButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

        }];

        _isDataing=NO;

        _isForming=NO;

        _isDybasting=YES;

    }else if (_currentTag==102){

        [UIView animateWithDuration:.25 animations:^{

            _dynastyButton.imageView.transform=CGAffineTransformIdentity;

            _formButton.imageView.transform=CGAffineTransformMakeRotation(M_PI);

            _dataButton.imageView.transform=CGAffineTransformIdentity;

            _formButton.selected=YES;

            _dynastyButton.selected=NO;

            _dataButton.selected=NO;

            //设置button的image

            [_dataButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

            [_dynastyButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

            [_formButton setImage:[UIImage imageNamed:@"upblack"] forState:(UIControlStateNormal)];

        }];

        _isDataing=NO;

        _isForming=YES;

        _isDybasting=NO;

    }

}

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    //1.根据分区获取该分区对应的数组

    if (_currentTag==100) {

        return self.dataArr.count;

    }else if (_currentTag==101){

        return self.dynastyArr.count;

    }

    return self.formArr.count;

}

  • (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    SXShowConditionCell *cell=[tableView dequeueReusableCellWithIdentifier:identify forIndexPath:indexPath];

//    看看是否需要显示后面的选中标记

    BOOL isSame = NO;

    //根据点击不同的button将不同的数据array中的string置为其标题

    NSString *name;

    if (_currentTag==100) {

//        在赋值的过程中,因为选择过的内容会显示在顶部的按钮上,如果数组里面的字符和按钮相同,就证明那个是上次选择的对象,加个标记

        if ([self.dataArr[indexPath.row] isEqualToString:_dataButton.titleLabel.text]) {

            isSame = YES;

        }

        name = self.dataArr[indexPath.row];

    }else if (_currentTag==101){

        if ([self.dynastyArr[indexPath.row] isEqualToString:_dynastyButton.titleLabel.text]) {

            isSame = YES;

        }

        name = self.dynastyArr[indexPath.row];

    }else if (_currentTag==102){

        if ([self.formArr[indexPath.row] isEqualToString:_formButton.titleLabel.text]) {

            isSame = YES;

        }

        name = self.formArr[indexPath.row];

    }

    cell.backgroundColor = [UIColor clearColor];

//    isSame取反的原因可以去cell类里面看一眼

    [cell setName:name andIsSelected:!isSame];

    return cell;

}

-(void)tableView:(UITableView )tableView didSelectRowAtIndexPath:(NSIndexPath )indexPath{

    //与点击button原理一样

    if (_currentTag==100) {

        if ([_dataButton.titleLabel.text isEqualToString:self.dataArr[indexPath.row]]) {

        }else{

            [_dataButton setTitle:self.dataArr[indexPath.row] forState:UIControlStateNormal];

        }

    }else if (_currentTag==101){

        [_dynastyButton setTitle:self.dynastyArr[indexPath.row] forState:UIControlStateNormal];

    [self changeFrameOfButton:_dynastyButton];

    }else if (_currentTag==102){

        [_formButton setTitle:self.formArr[indexPath.row] forState:UIControlStateNormal];

        [self changeFrameOfButton:_formButton];

    }

//    选择完毕,恢复状态

    [self restorationForButtonImageView];

    //每当点击cell 说明类型变换了,告诉控制器,需要重新根据标题更新新数据了。

    if (_selectBlock) {

        _selectBlock(@"点击了");

    }

    [self.searchTableView reloadData];

}

//    当点击了任何一个cell,就说明选择过了,除了按钮的标题要变,其他的都恢复初始状态

-(void)restorationForButtonImageView{

    [UIView animateWithDuration:.25 animations:^{

        _dataButton.imageView.transform=CGAffineTransformIdentity;

        _dynastyButton.imageView.transform=CGAffineTransformIdentity;

        _formButton.imageView.transform=CGAffineTransformIdentity;

        _isDataing=NO;

        _isForming=NO;

        _isDybasting=NO;

        _dataButton.selected=NO;

        _dynastyButton.selected=NO;

        _formButton.selected=NO;

        [_dataButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

        [_dynastyButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

        [_formButton setImage:[UIImage imageNamed:@"upwhite"] forState:(UIControlStateNormal)];

    }];

}

相关源码推荐:

我来说两句
*滑动验证:
所有评论(31)
逆鳞九霄 2017-8-30 16:51:57
楼主威武啊,Code4App有你更给力!
回复
秦桥村委会 2017-8-30 17:13:55
逆鳞九霄 发表于 2017-8-30 16:51
楼主威武啊,Code4App有你更给力!

。。。虽然比较基础,但是我之前还是新手的时候想找这个一直都找不到,现在自己可以写了,就拿出来分享给大家。。
回复
code4app热心网友 2017-8-30 17:57:53
我只是路过打酱油的。
回复
code4app热心网友 2017-8-30 20:37:38
精华内容,楼主V5!
回复
phoiu 2017-8-31 08:54:52
学习...学习...
回复
kengsir 2017-8-31 08:59:45
mark,收藏了
回复
AlonMessi 2017-8-31 09:02:36
感谢大神~
回复
BlueManlove 2017-8-31 09:07:08
帮帮顶顶!!
回复
littleRed 2017-8-31 09:18:37
虽不明,但觉厉...
回复
1234下一页
提取码:  下载次数:33 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
339 1 33
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表