您的位置:首页 > 移动开发 > IOS开发

IOS——创建可重用的开关按钮

2013-07-11 23:38 459 查看
我们想要定制按钮,可以在“开”和“关”之间切换,但是UISwitch又不符合我们的设计,这时候就得自定义这样的按钮,可以通过继承UIButton来实现。
XYToggleButton.h

#import <UIKit/UIKit.h>

@interface XYToggleButton : UIButton

@property (nonatomic, getter = isOn) BOOL on;
@property (nonatomic, getter = isAutotoggleEnabled) BOOL autotoggleEnabled;

+ (id)buttonWithOnImage:(UIImage *)onImage
offImage:(UIImage *)offImage
highlightedImage:(UIImage *)highlightedImage;

- (BOOL)toggle;

@end
XYToggleButton.m
#import "XYToggleButton.h"

@interface XYToggleButton ()

@property (nonatomic, retain) UIImage *onImage;
@property (nonatomic, retain) UIImage *offImage;

@end

@implementation XYToggleButton

@synthesize onImage = _onImage;
@synthesize offImage = _offImage;

@synthesize on = _on;
@synthesize autotoggleEnabled = _autotoggleEnabled;

+ (id)buttonWithOnImage:(UIImage *)onImage offImage:(UIImage *)offImage highlightedImage:(UIImage *)highlightedImage{
XYToggleButton *button;
button = [XYToggleButton buttonWithType:UIButtonTypeCustom];
button.onImage = onImage;
button.offImage = offImage;
[button setBackgroundImage:highlightedImage forState:UIControlStateHighlighted];

[button setBackgroundImage:offImage forState:UIControlStateNormal];
button.autotoggleEnabled = YES;

return button;
}

- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{

[super endTrackingWithTouch:touch withEvent:event];
if (self.touchInside && self.autotoggleEnabled) {
[self toggle];
}
}

- (BOOL)toggle{
self.on = !self.on;
return self.on;
}

- (void)setOn:(BOOL)on{
if (_on != on) {
_on = on;
[self setBackgroundImage:(_on ? self.onImage : self.offImage) forState:UIControlStateNormal];
}
}

//添加对IB的支持
#pragma mark - initFromNib
- (void)awakeFromNib{
self.autotoggleEnabled = YES;
self.onImage = [self backgroundImageForState:UIControlStateSelected];
self.offImage = [self backgroundImageForState:UIControlStateNormal];
[self setBackgroundImage:nil forState:UIControlStateSelected];
}

@end
代码下载:
地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: