自定义UISegmentedControl

本文介绍了如何在iOS项目中自定义一个无高亮状态的UISegmentedControl,通过继承UIButton并覆写setHighlighted方法来实现。详细讲解了自定义控件的实现过程,包括MyCustomSegmentedControl类的初始化方法、事件定义和布局调整,以及最终实现的效果。
摘要由CSDN通过智能技术生成

自定义UISegmentedControl

在iOS项目开发中,系统自带的控件并不能时时满足我们的需求,更多的是要自己自定义控件,最近在项目中,根据美工的设计,我也需要自定义一个UISegmentedControl,其实自定义这个控件还是挺简单的,不过还是决定写一篇文章把这个过程记录下来。

主要步骤

无高亮状态按钮的实现

首先,看着系统的的UISegmentedControl,可以发现,系统的分段在按下去之后是没有高亮状态的,我不知道系统的是用的什么子控件,我为了方便,采用了UIButton,但是UIButton有高亮状态,于是便需要从UIButton继承,覆写其中的setHighlighted方法,这样即可实现一个无高亮状态的按钮了,代码如下:

-(void)setHighlighted:(BOOL)highlighted {
    return [super setHighlighted:NO];
}

以前我看到别人有一种写法,就是在一个分类里面覆写一个已经存在的方法是什么意思,这个和原来一个类中存在的方法有什么区别,到底是先调用系统的方法再调用分类中同样的方法,还是只调用系统的方法忽略分类中的方法,还是只调用分类中的方法忽略系统系统中的方法,于是我就自己试着这样写了一下,代码如下:

@implementation UIButton (noHighlighted)

- (void)setHighlighted:(BOOL)highlighted {
    return [super setHighlighted:NO];
}

@end

经过证实,其实这种写法和覆盖系统的方法是一样的,只是利用分类的好处,覆写原有类中的方法,不需要重新继承一个罢了,可是这样做是有问题的,就是其他的按钮都会变成无高亮状态的按钮,这并不是我希望的,所以还是老老实实继承一个出来比较好。

控件的主要实现

MyCustomSegmentedControl类

为了实现背景的自定义,比如说用图片做背景等需求,我整体采用了一个UIImageView,其他所有的控件都是加在这个背景ImageView当中,该类的主要情况如下所示:

@interface MyCustomSegmentedControl : UIImageView

-(instancetype)initWithArray:(NSArray*)items;
-(instancetype)initWithItems:(NSString*)item, ... NS_REQUIRES_NIL_TERMINATION;
-(void)setItemsWithTitle:(NSString*)title,... NS_REQUIRES_NIL_TERMINATION;
-(void)setItemsWithArray:(NSArray*)items;
-(void)addTarget:(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值