自定义排序按钮

现在好多APP特别是购物的有筛选排序, 像升序降序那种,最近项目做了个类似的分享给大家。

1.准备两个图片

2.定义UIButton子类

#import <UIKit/UIKit.h>

typedef  void(^DropBtnClickBlock)(BOOL isSeelect);

@interface DropBtn : UIButton

@property (nonatomic,strong) NSString *title;

@property (nonatomic,strong) UIImageView  *upOrDownImg;

@property (nonatomic,copy)   DropBtnClickBlock btnClickBlock;
@end
#import "DropBtn.h"
#define RGB(r,g,b)                  [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]

@implementation DropBtn

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _title=[[NSString alloc]init];
        _upOrDownImg=[[UIImageView alloc]init];
        _upOrDownImg.image=[UIImage imageNamed:@"yzp_data_dropdown.png"];
        _upOrDownImg.frame=CGRectMake(self.frame.size.width-20-8, (frame.size.height-5)/2, 8, 5);
        [self addSubview:_upOrDownImg];
        [self addTarget:self action:@selector(btnClickHandle:) forControlEvents:UIControlEventTouchUpInside];

    }
    return self;
}
-(void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    //计算出字符串的frame
    NSDictionary *attributes[email protected]{NSFontAttributeName: [UIFont systemFontOfSize:20.f],NSForegroundColorAttributeName:RGB(26, 26, 26)};
    CGRect frame=[_title boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
    [_title drawAtPoint:CGPointMake((self.bounds.size.width-8-frame.size.width-20)/2, (self.bounds.size.height-frame.size.height)/2) withAttributes:attributes];
}

-(void)btnClickHandle:(id)sender
{
    UIButton *btn=(UIButton *)sender;
    btn.selected=!btn.selected;
    _btnClickBlock(btn.selected);
}
-(void)setSelected:(BOOL)selected
{
    [super setSelected:selected];
    if (!selected) {
        _upOrDownImg.image=[UIImage imageNamed:@"yzp_data_dropdown.png"];
    }
    else
    {
        _upOrDownImg.image=[UIImage imageNamed:@"yzp_data_dropback.png"];
    }

}

@end

3.调用

 DropBtn *dropBtn=[[DropBtn alloc]initWithFrame:CGRectMake(0, 44, self.view.bounds.size.width/2, 60)];
    dropBtn.title=@"价格";
    dropBtn.backgroundColor=[UIColor yellowColor];
    dropBtn.btnClickBlock=^(BOOL isSelected)
    {

    };
    [self.view addSubview:dropBtn];

4.效果

时间: 2024-12-28 20:13:24

自定义排序按钮的相关文章

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

定制对ArrayList的sort方法的自定义排序

java中的ArrayList需要通过collections类的sort方法来进行排序 如果想自定义排序方式则需要有类来实现Comparator接口并重写compare方法 调用sort方法时将ArrayList对象与实现Commparator接口的类的对象作为参数 示例: // 外部类的方式 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.uti

ArcGIS API for JavaScript 4.2学习笔记[16] 弹窗自定义功能按钮及为要素自定义按钮(第五章完结)

这节对Popups这一章的最后两个例子进行介绍和解析. 第一个[Popup Actions]介绍了弹窗中如何自定义工具按钮(名为actions),以PopupTemplate+FeatureLayer的形式测量要素的长度为例子进行介绍. 第二个[Custom popup actions per feature]则是上一个的升级,如果说上一个例子的功能是写死的,那么这个例子就把这个功能写活了.什么意思呢?上个例子的测距仅仅能测距,没有什么别的特别的.而这个例子以啤酒店的分布(点要素图层)为例,在自

MapReduce 学习4 ---- 自定义分区、自定义排序、自定义组分

1. map任务处理 1.3 对输出的key.value进行分区. 分区的目的指的是把相同分类的<k,v>交给同一个reducer任务处理. public static class MyPartitioner<Text, LongWritable> extends Partitioner<Text, LongWritable>{ static HashMap<String,Integer> map = null; static{ map = new Hash

Java集合框架实现自定义排序

Java集合框架针对不同的数据结构提供了多种排序的方法,虽然很多时候我们可以自己实现排序,比如数组等,但是灵活的使用JDK提供的排序方法,可以提高开发效率,而且通常JDK的实现要比自己造的轮子性能更优化. 一 .使用Arrays对数组进行排序 Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法. 1.使用Arrays排序:Arrays使用非常简单,直接调用sort()即可 int[] arr = new int[] {5,8,-2,0,10}; Array

php多维数组自定义排序 uasort()

php内置的排序函数很多:正反各种排: 常用的排序函数: sort() - 以升序对数组排序rsort() - 以降序对数组排序asort() - 根据值,以升序对关联数组进行排序ksort() - 根据键,以升序对关联数组进行排序arsort() - 根据值,以降序对关联数组进行排序krsort() - 根据键,以降序对关联数组进行排序 基本都能满足需求了:关于这些函数的使用方法就不多啰嗦了: 但是在项目的实际开发中还是会有些更加苛刻的排序需求:今天要介绍的排序函数是: uasort() ua

Hadoop之--&gt;自定义排序

data: 3 33 23 12 22 11 1 --------------------- 需求: 1 12 12 23 13 23 3 package sort; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path

ios 设置所有 导航控制器 的返回按钮 自定义导航按钮

应用场景: 1.当导航控制器push很多次,每个自控制器都需要自定义返回按钮,很麻烦 2.当进入二级界面以后,需要隐藏底部的tabbar 3.一次性设置顶部导航条的颜色 解决方法: 自定义导航控制器,重写push(跳到下一个控制器) 和 pop(返回上一个控制器) 方法 代码: #import "SGNavigationController.h" @interface SGNavigationController () @end @implementation SGNavigation

自定义水晶按钮控件

namespace 自定义水晶按钮控件 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="disposing&quo