uisegmentedcontrol类重写,自定义按钮和背景颜色

。h文件

#import <UIKit/UIKit.h>

@interface MCSegmentedControl : UISegmentedControl {

NSMutableArray *_items;

UIFont  *_font;

UIColor *_selectedItemColor;

UIColor *_unselectedItemColor;


UIColor *_selectedItemShadowColor;

UIColor *_unselectedItemShadowColor;

CGFloat _cornerRadius;

NSArray *_unSelectedItemBackgroundGradientColors;

}

/**

 * Font for the segments with title

 * Default is sysyem bold 18points

 */

@property (nonatomic, retain) UIFont  *font;

/**

 * Color of the item in the selected segment

 * Applied to text and images

 */

@property (nonatomic, retain) UIColor *selectedItemColor;

/**

 * Color of the items not in the selected segment

 * Applied to text and images

 */

@property (nonatomic, retain) UIColor *unselectedItemColor;

/**

 * Default is black with .2 alpha

 */

@property (nonatomic, retain) UIColor *selectedItemShadowColor;

/**

 * Default is white

 */

@property (nonatomic, retain) UIColor *unselectedItemShadowColor;


@property (nonatomic, assign) CGFloat cornerRadius;


/**

 * Contains the 2 gradient components for the non-selected items

 * Default is white and gray 200/255.0

 */

@property (nonatomic, retain) NSArray *unSelectedItemBackgroundGradientColors;

@end


。m文件

#import "MCSegmentedControl.h"


#define kDefaultCornerRadius   10.0f


@interface MCSegmentedControl () {

@private

NSArray *_unSelectedItemBackgroundGradientCGColors;

}

@property (nonatomic, retain, readwrite) NSMutableArray *items;

- (BOOL)_mustCustomize;

@end



@implementation MCSegmentedControl


#pragma mark - Object life cycle


- (void)_initialize

{

self.cornerRadius = kDefaultCornerRadius;

self.selectedItemShadowColor = [UIColor colorWithWhite:0.0f alpha:.2f];

self.unselectedItemShadowColor = [UIColor whiteColor];

self.unSelectedItemBackgroundGradientColors = [NSArray arrayWithObjects:

  [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.0],

  [UIColor colorWithRed:200/255.0 green:200/255.0 blue:200/255.0 alpha:1.0],

  nil];

}


- (void)awakeFromNib

{

NSMutableArray *ar = [NSMutableArray arrayWithCapacity:self.numberOfSegments];


for (int i = 0; i < self.numberOfSegments; i++) {

NSString *aTitle = [self titleForSegmentAtIndex:i];

if (aTitle) {

[ar addObject:aTitle];

} else {

UIImage *anImage = [self imageForSegmentAtIndex:i];

if (anImage) {

[ar addObject:anImage];

}

}

}


self.items = ar;

[self _initialize];

[self setNeedsDisplay];

}


- (id)initWithItems:(NSArray *)array

{

self = [super initWithItems:array];

if (self) {

if (array) {

NSMutableArray *mutableArray = [array mutableCopy];

self.items = mutableArray;

[mutableArray release];

} else {

self.items = [NSMutableArray array];

}

[self _initialize];

}

return self;

}


- (void)dealloc

{

self.items               = nil;

self.font                = nil;

self.selectedItemColor   = nil;

self.unselectedItemColor = nil;

    [super dealloc];

}


- (BOOL)_mustCustomize

{

return self.segmentedControlStyle == UISegmentedControlStyleBordered

|| self.segmentedControlStyle == UISegmentedControlStylePlain;

}


#pragma mark - Custom accessors


- (UIFont *)font

{

if (_font == nil) {

self.font = [UIFont boldSystemFontOfSize:18.0f];

}

return _font;

}

- (void)setFont:(UIFont *)aFont

{

if (_font != aFont) {

[_font release];

_font = [aFont retain];

[self setNeedsDisplay];

}

}

- (UIColor *)selectedItemColor

{

if (_selectedItemColor == nil) {

self.selectedItemColor = [UIColor whiteColor];

}

return _selectedItemColor;

}


- (void)setSelectedItemColor:(UIColor *)aColor

{

if (aColor != _selectedItemColor) {

[_selectedItemColor release];

_selectedItemColor = [aColor retain];

[self setNeedsDisplay];

}

}


- (UIColor *)unselectedItemColor

{

if (_unselectedItemColor == nil) {

self.unselectedItemColor = [UIColor grayColor];

}

return _unselectedItemColor;

}


- (void)setUnselectedItemColor:(UIColor *)aColor

{

if (aColor != _unselectedItemColor) {

[_unselectedItemColor release];

_unselectedItemColor = [aColor retain];

[self setNeedsDisplay];

}

}


- (NSMutableArray *)items

{

return _items;

}


- (void)setItems:(NSMutableArray *)array

{

if (_items != array) {

[_items release];

_items = [array retain];

}

}


- (CGFloat)cornerRadius

{

return _cornerRadius;

}


- (void)setCornerRadius:(CGFloat)cornerRadius

{

if (cornerRadius != _cornerRadius) {

_cornerRadius = cornerRadius;

[self setNeedsDisplay];

}

}


- (NSArray *)unSelectedItemBackgroundGradientColors

{

return _unSelectedItemBackgroundGradientCGColors;

}

- (void)setUnSelectedItemBackgroundGradientColors:(NSArray *)array

{

if (array && [array count] != 2) {

NSLog(@"MCSegmentedControl WARNING: unSelectedItemBackgroundGradientColors must contain 2 colors");

else if (array != _unSelectedItemBackgroundGradientColors) {

[_unSelectedItemBackgroundGradientColors release];

_unSelectedItemBackgroundGradientColors = [array retain];


if (_unSelectedItemBackgroundGradientColors) {

[_unSelectedItemBackgroundGradientCGColors release];

_unSelectedItemBackgroundGradientCGColors = [[NSArray alloc] initWithObjects:

(id)((UIColor *)[_unSelectedItemBackgroundGradientColors objectAtIndex:0]).CGColor

(id)((UIColor *)[_unSelectedItemBackgroundGradientColors objectAtIndex:1]).CGColor

nil];


[self setNeedsDisplay];

}

else {

[_unSelectedItemBackgroundGradientCGColors release], _unSelectedItemBackgroundGradientCGColors = nil;

}

}

}

- (UIColor *)selectedItemShadowColor

{

return _selectedItemShadowColor;

}


- (void)setSelectedItemShadowColor:(UIColor *)selectedItemShadowColor

{

if (selectedItemShadowColor != _selectedItemShadowColor) {

[_selectedItemShadowColor release];

_selectedItemShadowColor = [selectedItemShadowColor retain];

[self setNeedsDisplay];

}

}


- (UIColor *)unselectedItemShadowColor

{

return _unselectedItemShadowColor;

}


- (void)setUnselectedItemShadowColor:(UIColor *)unselectedItemShadowColor

{

if (unselectedItemShadowColor != _unselectedItemShadowColor) {

[_unselectedItemShadowColor release];

_unselectedItemShadowColor = [unselectedItemShadowColor retain];

[self setNeedsDisplay];

}

}

#pragma mark - Overridden UISegmentedControl methods


- (void)layoutSubviews

{

for (UIView *subView in self.subviews) {

[subView removeFromSuperview];

}

}

- (NSUInteger)numberOfSegments

{

if (!self.items || ![self _mustCustomize]) {

return [super numberOfSegments];

} else {

return self.items.count;

}

}

- (void)drawRect:(CGRect)rect

{

// Only the bordered and plain style are customized

if (![self _mustCustomize]) {

[super drawRect:rect];

return;

}


// TODO: support for segment custom width

CGSize itemSize = CGSizeMake(round(rect.size.width / self.numberOfSegments), rect.size.height);


CGContextRef c = UIGraphicsGetCurrentContext();

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextSaveGState(c);

// Rect with radius, will be used to clip the entire view

CGFloat minx = CGRectGetMinX(rect) + 1, midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;

CGFloat miny = CGRectGetMinY(rect) + 1, midy = CGRectGetMidY(rect) , maxy = CGRectGetMaxY(rect) ;

// Path are drawn starting from the middle of a pixel, in order to avoid an antialiased line

CGContextMoveToPoint(c, minx - .5, midy - .5);

CGContextAddArcToPoint(c, minx - .5, miny - .5, midx - .5, miny - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, miny - .5, maxx - .5, midy - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, maxy - .5, midx - .5, maxy - .5, _cornerRadius);

CGContextAddArcToPoint(c, minx - .5, maxy - .5, minx - .5, midy - .5, _cornerRadius);

CGContextClosePath(c);

CGContextClip(c);

// Background gradient for non selected items

if (_unSelectedItemBackgroundGradientCGColors) {

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)_unSelectedItemBackgroundGradientCGColors, NULL);

CGContextDrawLinearGradient(c, gradient, CGPointZero, CGPointMake(0, rect.size.height), kCGGradientDrawsBeforeStartLocation);

CFRelease(gradient);

}

for (int i = 0; i < self.numberOfSegments; i++) {

id item = [self.items objectAtIndex:i];

BOOL isLeftItem  = i == 0;

BOOL isRightItem = i == self.numberOfSegments -1;

BOOL isSegmentEnabled = [self isEnabledForSegmentAtIndex:i];


CGRect itemBgRect = CGRectMake(i * itemSize.width

  0.0f,

  itemSize.width,

  rect.size.height);

if (i == self.selectedSegmentIndex) {

// -- Selected item --

// Background gradient is composed of two gradients, one on the top, another rounded on the bottom

CGContextSaveGState(c);

CGContextClipToRect(c, itemBgRect);

float factor  = 1.22f; // multiplier applied to the first color of the gradient to obtain the second

float mfactor = 1.25f; // multiplier applied to the color of the first gradient to obtain the bottom gradient

int red = 55, green = 111, blue = 214; // default blue color

if (self.tintColor != nil) {

const CGFloat *components = CGColorGetComponents(self.tintColor.CGColor);

size_t numberOfComponents = CGColorGetNumberOfComponents(self.tintColor.CGColor);

if (numberOfComponents == 2) {

red = green = blue = components[0] * 255;

} else if (numberOfComponents == 4) {

red   = components[0] * 255;

green = components[1] * 255;

blue  = components[2] * 255;

}

}

// Top gradient

CGFloat top_components[16] = { 

red / 255.0f,         green / 255.0f,         blue/255.0f          , 1.0f,

(red*mfactor)/255.0f, (green*mfactor)/255.0f, (blue*mfactor)/255.0f, 1.0f

};

CGFloat top_locations[2] = {

0.0f, .75f

};

CGGradientRef top_gradient = CGGradientCreateWithColorComponents(colorSpace, top_components, top_locations, 2);

CGContextDrawLinearGradient(c, 

top_gradient, 

itemBgRect.origin

CGPointMake(itemBgRect.origin.x

itemBgRect.size.height), 

kCGGradientDrawsBeforeStartLocation);

CFRelease(top_gradient);

CGContextRestoreGState(c);

// Bottom gradient

// It's clipped in a rect with the left corners rounded if segment is the first,

// right corners rounded if segment is the last, no rounded corners for the segments inbetween

CGRect bottomGradientRect = CGRectMake(itemBgRect.origin.x

  itemBgRect.origin.y + round(itemBgRect.size.height / 2), 

  itemBgRect.size.width

  round(itemBgRect.size.height / 2));

CGFloat gradient_minx = CGRectGetMinX(bottomGradientRect) + 1;

CGFloat gradient_midx = CGRectGetMidX(bottomGradientRect);

CGFloat gradient_maxx = CGRectGetMaxX(bottomGradientRect);

CGFloat gradient_miny = CGRectGetMinY(bottomGradientRect) + 1;

CGFloat gradient_midy = CGRectGetMidY(bottomGradientRect);

CGFloat gradient_maxy = CGRectGetMaxY(bottomGradientRect);

CGContextSaveGState(c);

if (isLeftItem) {

CGContextMoveToPoint(c, gradient_minx - .5f, gradient_midy - .5f);

} else {

CGContextMoveToPoint(c, gradient_minx - .5f, gradient_miny - .5f);

}

CGContextAddArcToPoint(c, gradient_minx - .5f, gradient_miny - .5f, gradient_midx - .5f, gradient_miny - .5f, _cornerRadius);

if (isRightItem) {

CGContextAddArcToPoint(c, gradient_maxx - .5f, gradient_miny - .5f, gradient_maxx - .5f, gradient_midy - .5f, _cornerRadius);

CGContextAddArcToPoint(c, gradient_maxx - .5f, gradient_maxy - .5f, gradient_midx - .5f, gradient_maxy - .5f, _cornerRadius);

} else {

CGContextAddLineToPoint(c, gradient_maxx, gradient_miny);

CGContextAddLineToPoint(c, gradient_maxx, gradient_maxy);

}

if (isLeftItem) {

CGContextAddArcToPoint(c, gradient_minx - .5f, gradient_maxy - .5f, gradient_minx - .5f, gradient_midy - .5f, _cornerRadius);

} else {

CGContextAddLineToPoint(c, gradient_minx, gradient_maxy);

}

CGContextClosePath(c);

CGContextClip(c);

CGFloat bottom_components[16] = {

(red*factor)        /255.0f, (green*factor)        /255.0f, (blue*factor)/255.0f,         1.0f,

(red*factor*mfactor)/255.0f, (green*factor*mfactor)/255.0f, (blue*factor*mfactor)/255.0f, 1.0f

};

CGFloat bottom_locations[2] = {

0.0f, 1.0f

};

CGGradientRef bottom_gradient = CGGradientCreateWithColorComponents(colorSpace, bottom_components, bottom_locations, 2);

CGContextDrawLinearGradient(c, 

bottom_gradient, 

bottomGradientRect.origin

CGPointMake(bottomGradientRect.origin.x

bottomGradientRect.origin.y + bottomGradientRect.size.height), 

kCGGradientDrawsBeforeStartLocation);

CFRelease(bottom_gradient);

CGContextRestoreGState(c);

// Inner shadow

int blendMode = kCGBlendModeDarken;

// Right and left inner shadow 

CGContextSaveGState(c);

CGContextSetBlendMode(c, blendMode);

CGContextClipToRect(c, itemBgRect);

CGFloat inner_shadow_components[16] = {

0.0f, 0.0f, 0.0f, isLeftItem ? 0.0f : .25f,

0.0f, 0.0f, 0.0f, 0.0f,

0.0f, 0.0f, 0.0f, 0.0f,

0.0f, 0.0f, 0.0f, isRightItem ? 0.0f : .25f

};

CGFloat locations[4] = {

0.0f, .05f, .95f, 1.0f

};

CGGradientRef inner_shadow_gradient = CGGradientCreateWithColorComponents(colorSpace, inner_shadow_components, locations, 4);

CGContextDrawLinearGradient(c, 

inner_shadow_gradient, 

itemBgRect.origin

CGPointMake(itemBgRect.origin.x + itemBgRect.size.width

itemBgRect.origin.y), 

kCGGradientDrawsAfterEndLocation);

CFRelease(inner_shadow_gradient);

CGContextRestoreGState(c);

// Top inner shadow 

CGContextSaveGState(c);

CGContextSetBlendMode(c, blendMode);

CGContextClipToRect(c, itemBgRect);

CGFloat top_inner_shadow_components[8] = { 

0.0f, 0.0f, 0.0f, 0.25f,

0.0f, 0.0f, 0.0f, 0.0f

};

CGFloat top_inner_shadow_locations[2] = {

0.0f, .10f

};

CGGradientRef top_inner_shadow_gradient = CGGradientCreateWithColorComponents(colorSpace, top_inner_shadow_components, top_inner_shadow_locations, 2);

CGContextDrawLinearGradient(c, 

top_inner_shadow_gradient, 

itemBgRect.origin

CGPointMake(itemBgRect.origin.x

itemBgRect.size.height), 

kCGGradientDrawsAfterEndLocation);

CFRelease(top_inner_shadow_gradient);

CGContextRestoreGState(c);

}

if ([item isKindOfClass:[UIImage class]]) {

CGImageRef imageRef = [(UIImage *)item CGImage];

CGFloat imageScale  = [(UIImage *)item scale];

CGFloat imageWidth  = CGImageGetWidth(imageRef)  / imageScale;

CGFloat imageHeight = CGImageGetHeight(imageRef) / imageScale;

CGRect imageRect = CGRectMake(round(i * itemSize.width + (itemSize.width - imageWidth) / 2), 

  round((itemSize.height - imageHeight) / 2),

  imageWidth,

  imageHeight);

if (i == self.selectedSegmentIndex) {

// 1px shadow

CGContextSaveGState(c);

CGContextTranslateCTM(c, 0, itemBgRect.size.height);  

CGContextScaleCTM(c, 1.0, -1.0);  

CGContextClipToMask(c, CGRectOffset(imageRect, 0, 1), imageRef);

CGContextSetFillColorWithColor(c, self.selectedItemShadowColor.CGColor);

CGContextFillRect(c, CGRectOffset(imageRect, 0, -1));

CGContextRestoreGState(c);

// Image drawn as a mask

CGContextSaveGState(c);

CGContextTranslateCTM(c, 0, rect.size.height);

CGContextScaleCTM(c, 1.0, -1.0);  

CGContextClipToMask(c, imageRect, imageRef);

CGContextSetFillColorWithColor(c, self.selectedItemColor.CGColor);

CGContextFillRect(c, imageRect);

CGContextRestoreGState(c);

else {

if (isSegmentEnabled) {

// 1px shadow

CGContextSaveGState(c);

CGContextTranslateCTM(c, 0, itemBgRect.size.height);  

CGContextScaleCTM(c, 1.0, -1.0);  

CGContextClipToMask(c, CGRectOffset(imageRect, 0, -1), imageRef);

CGContextSetFillColorWithColor(c, self.unselectedItemShadowColor.CGColor);

CGContextFillRect(c, CGRectOffset(imageRect, 0, -1));

CGContextRestoreGState(c);

}

// Image drawn as a mask

CGContextSaveGState(c);

CGContextTranslateCTM(c, 0, itemBgRect.size.height);  

CGContextScaleCTM(c, 1.0, -1.0);  

CGContextClipToMask(c, imageRect, imageRef);

CGContextSetFillColorWithColor(c, [self.unselectedItemColor CGColor]);

CGContextSetAlpha(c, isSegmentEnabled ? 1.0 : 0.5);

CGContextFillRect(c, imageRect);

CGContextRestoreGState(c);

}

}

else if ([item isKindOfClass:[NSString class]]) {

CGContextSaveGState(c);


NSString *string = (NSString *)[_items objectAtIndex:i];

CGSize stringSize = [string sizeWithFont:self.font];

CGRect stringRect = CGRectMake(i * itemSize.width + (itemSize.width - stringSize.width) / 2

  (itemSize.height - stringSize.height) / 2,

  stringSize.width,

  stringSize.height);

if (self.selectedSegmentIndex == i) {

[self.selectedItemShadowColor setFill];

[string drawInRect:CGRectOffset(stringRect, 0.0f, -1.0f) withFont:self.font];

[self.selectedItemColor setFill];

[self.selectedItemColor setStroke];

[string drawInRect:stringRect withFont:self.font];

} else {

if (isSegmentEnabled) {

[self.unselectedItemShadowColor setFill];

[string drawInRect:CGRectOffset(stringRect, 0.0f, 1.0f) withFont:self.font];

}

[self.unselectedItemColor setFill];

CGContextSetAlpha(c, isSegmentEnabled ? 1.0 : 0.5);

[string drawInRect:stringRect withFont:self.font];

}

CGContextRestoreGState(c);

}

// Separator

if (i > 0 && i - 1 != self.selectedSegmentIndex && i != self.selectedSegmentIndex) {

CGContextSaveGState(c);

CGContextMoveToPoint(c, itemBgRect.origin.x + .5, itemBgRect.origin.y);

CGContextAddLineToPoint(c, itemBgRect.origin.x + .5, itemBgRect.size.height);

CGContextSetLineWidth(c, .5f);

CGContextSetStrokeColorWithColor(c, [UIColor colorWithWhite:120/255.0 alpha:1.0].CGColor);

CGContextStrokePath(c);

CGContextRestoreGState(c);

}

}

CGContextRestoreGState(c);

if (self.segmentedControlStyle ==  UISegmentedControlStyleBordered) {

CGContextMoveToPoint(c, minx - .5, midy - .5);

CGContextAddArcToPoint(c, minx - .5, miny - .5, midx - .5, miny - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, miny - .5, maxx - .5, midy - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, maxy - .5, midx - .5, maxy - .5, _cornerRadius);

CGContextAddArcToPoint(c, minx - .5, maxy - .5, minx - .5, midy - .5, _cornerRadius);

CGContextClosePath(c);

CGContextSetStrokeColorWithColor(c,[UIColor blackColor].CGColor);

CGContextSetLineWidth(c, 1.0f);

CGContextStrokePath(c);

} else {

CGContextSaveGState(c);

CGRect bottomHalfRect = CGRectMake(0

  rect.size.height - _cornerRadius + 7,

  rect.size.width,

  _cornerRadius);

CGContextClearRect(c, CGRectMake(0

rect.size.height - 1,

rect.size.width,

1));

CGContextClipToRect(c, bottomHalfRect);

CGContextMoveToPoint(c, minx + .5, midy - .5);

CGContextAddArcToPoint(c, minx + .5, miny - .5, midx - .5, miny - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, miny - .5, maxx - .5, midy - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, maxy - .5, midx - .5, maxy - .5, _cornerRadius);

CGContextAddArcToPoint(c, minx + .5, maxy - .5, minx - .5, midy - .5, _cornerRadius);

CGContextClosePath(c);

CGContextSetBlendMode(c, kCGBlendModeLighten);

CGContextSetStrokeColorWithColor(c,[UIColor colorWithWhite:255/255.0 alpha:1.0].CGColor);

CGContextSetLineWidth(c, .5f);

CGContextStrokePath(c);

CGContextRestoreGState(c);

midy--, maxy--;

CGContextMoveToPoint(c, minx - .5, midy - .5);

CGContextAddArcToPoint(c, minx - .5, miny - .5, midx - .5, miny - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, miny - .5, maxx - .5, midy - .5, _cornerRadius);

CGContextAddArcToPoint(c, maxx - .5, maxy - .5, midx - .5, maxy - .5, _cornerRadius);

CGContextAddArcToPoint(c, minx - .5, maxy - .5, minx - .5, midy - .5, _cornerRadius);

CGContextClosePath(c);

CGContextSetBlendMode(c, kCGBlendModeMultiply);

CGContextSetStrokeColorWithColor(c,[UIColor colorWithWhite:30/255.0 alpha:.9].CGColor);

CGContextSetLineWidth(c, .5f);

CGContextStrokePath(c);

}


CFRelease(colorSpace);

}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

if (![self _mustCustomize]) {

[super touchesBegan:touches withEvent:event];

} else {

CGPoint point = [[touches anyObject] locationInView:self];

int itemIndex = floor(self.numberOfSegments * point.x / self.bounds.size.width);

if ([self isEnabledForSegmentAtIndex:itemIndex]) {

self.selectedSegmentIndex = itemIndex;

[self setNeedsDisplay];

}

}

}


- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex

{

if (selectedSegmentIndex == self.selectedSegmentIndex) return;

[super setSelectedSegmentIndex:selectedSegmentIndex];

#ifdef __IPHONE_5_0

if ([self respondsToSelector:@selector(apportionsSegmentWidthsByContent)]

&& [self _mustCustomize]) 

{

[self sendActionsForControlEvents:UIControlEventValueChanged];

}

#endif

}


- (void)setSegmentedControlStyle:(UISegmentedControlStyle)aStyle

{

[super setSegmentedControlStyle:aStyle];

if ([self _mustCustomize]) {

[self setNeedsDisplay];

}

}


- (void)setTitle:(NSString *)title forSegmentAtIndex:(NSUInteger)segment

{

if (![self _mustCustomize]) {

[super setTitle:title forSegmentAtIndex:segment];

} else {

[self.items replaceObjectAtIndex:segment withObject:title];

[self setNeedsDisplay];

}

}


- (void)setImage:(UIImage *)image forSegmentAtIndex:(NSUInteger)segment

{

if (![self _mustCustomize]) {

[super setImage:image forSegmentAtIndex:segment];

} else {

[self.items replaceObjectAtIndex:segment withObject:image];

[self setNeedsDisplay];

}

}


- (void)insertSegmentWithTitle:(NSString *)title atIndex:(NSUInteger)segment animated:(BOOL)animated

{

if (![self _mustCustomize]) {

[super insertSegmentWithTitle:title atIndex:segment animated:animated];

} else {

if (segment >= self.numberOfSegments && segment != 0) return;

[super insertSegmentWithTitle:title atIndex:segment animated:animated];

[self.items insertObject:title atIndex:segment];

[self setNeedsDisplay];

}

}


- (void)insertSegmentWithImage:(UIImage *)image atIndex:(NSUInteger)segment animated:(BOOL)animated

{

if (![self _mustCustomize]) {

[super insertSegmentWithImage:image atIndex:segment animated:animated];

} else {

if (segment >= self.numberOfSegments) return;

[super insertSegmentWithImage:image atIndex:segment animated:animated];

[self.items insertObject:image atIndex:segment];

[self setNeedsDisplay];

}

}


- (void)removeSegmentAtIndex:(NSUInteger)segment animated:(BOOL)animated

{

if (![self _mustCustomize]) {

[super removeSegmentAtIndex:segment animated:animated];

} else {

if (segment >= self.numberOfSegments) return;

[self.items removeObjectAtIndex:segment];

[self setNeedsDisplay];

}

}



@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值