ifish/Ifish/controllers/IfishTabControllers/消息/IfishIMFiles/Sessions/Chatroom/View/NTESChatroomSegmentedControl.m

126 lines
3.2 KiB
Objective-C

//
// NTESChatroomSegmentedControl.m
// NIM
//
// Created by chris on 15/12/16.
// Copyright © 2015年 Netease. All rights reserved.
//
#import "NTESChatroomSegmentedControl.h"
#import "UIView+NTES.h"
@interface NTESChatroomSegmentedControl()
@property (nonatomic,strong) NSMutableArray<UIButton *> *segments;
@property (nonatomic,strong) NSMutableArray<NSInvocation *> *invocations;
@property (nonatomic,assign) NSInteger selectedIndex;
@end
@implementation NTESChatroomSegmentedControl
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
_segments = [[NSMutableArray alloc] init];
_invocations = [[NSMutableArray alloc] init];
}
return self;
}
- (void)insertSegmentWithTitle:(NSString *)title{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(onSegmentTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
button.tag = self.segments.count;
[button setTitle:title forState:UIControlStateNormal];
[self addSubview:button];
[self.segments addObject:button];
[self refresh];
}
- (void)setSelectedSegmentIndex:(NSInteger)index
{
self.selectedIndex = index;
[self refresh];
}
- (NSInteger)selectedSegmentIndex
{
return self.selectedIndex;
}
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state atIndex:(NSInteger)index
{
UIButton *button = self.segments[index];
[button setBackgroundImage:image forState:state];
}
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state atIndex:(NSInteger)index
{
UIButton *button = self.segments[index];
[button setTitleColor:color forState:state];
}
- (void)setFont:(UIFont *)font atIndex:(NSInteger)index
{
UIButton *button = self.segments[index];
button.titleLabel.font = font;
}
- (void)onSegmentTouchUpInside:(id)sender
{
NSInteger index = [(UIButton *)sender tag];
if (index != self.selectedIndex) { //value changed
self.selectedIndex = index;
[self refresh];
[self invokeValueChangedAction];
}
}
- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
{
if (controlEvents == UIControlEventValueChanged) {
UIView *view = self;
NSMethodSignature *sig = [[target class] instanceMethodSignatureForSelector:action];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
[inv setTarget:target];
[inv setSelector:action];
[inv setArgument:&view atIndex:2];
[_invocations addObject:inv];
}
}
- (void)refresh
{
for (UIButton *button in self.segments) {
button.selected = NO;
}
self.segments[self.selectedIndex].selected = YES;
}
- (void)invokeValueChangedAction
{
for (NSInvocation *inv in _invocations) {
[inv invoke];
}
}
- (void)layoutSubviews{
[super layoutSubviews];
CGFloat left = 0.0f;
CGFloat width = self.width / self.segments.count;
CGFloat height = self.height;
for (UIButton *button in self.segments) {
button.size = CGSizeMake(width, height);
button.left = left;
left += button.width;
}
}
@end