// // XHEmotionSectionBar.m // MessageDisplayExample // // Created by HUAJIE-1 on 14-5-3. // Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotionSectionBar.h" #define kXHStoreManagerItemWidth 40 @interface XHEmotionSectionBar () /** * 是否显示表情商店的按钮 */ @property (nonatomic, assign) BOOL isShowEmotionStoreButton; // default is YES @property (nonatomic, weak) UIScrollView *sectionBarScrollView; @property (nonatomic, weak) UIButton *storeManagerItemButton; @end @implementation XHEmotionSectionBar - (void)sectionButtonClicked:(UIButton *)sender { if ([self.delegate respondsToSelector:@selector(didSelecteEmotionManager:atSection:)]) { NSInteger section = sender.tag; if (section < self.emotionManagers.count) { [self.delegate didSelecteEmotionManager:[self.emotionManagers objectAtIndex:section] atSection:section]; } } } - (UIButton *)cratedButton { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(0, 0, kXHStoreManagerItemWidth, CGRectGetHeight(self.bounds)); [button addTarget:self action:@selector(sectionButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; return button; } - (void)reloadData { if (!self.emotionManagers.count) return; [self.sectionBarScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; for (XHEmotionManager *emotionManager in self.emotionManagers) { NSInteger index = [self.emotionManagers indexOfObject:emotionManager]; UIButton *sectionButton = [self cratedButton]; sectionButton.tag = index; [sectionButton setTitle:emotionManager.emotionName forState:UIControlStateNormal]; sectionButton.titleLabel.font = [UIFont systemFontOfSize:14]; CGRect sectionButtonFrame = sectionButton.frame; sectionButtonFrame.origin.x = index * (CGRectGetWidth(sectionButtonFrame)); sectionButton.frame = sectionButtonFrame; [self.sectionBarScrollView addSubview:sectionButton]; } [self.sectionBarScrollView setContentSize:CGSizeMake(self.emotionManagers.count * kXHStoreManagerItemWidth, CGRectGetHeight(self.bounds))]; } #pragma mark - Lefy cycle - (void)setup { if (!_sectionBarScrollView) { CGFloat scrollWidth = CGRectGetWidth(self.bounds); if (self.isShowEmotionStoreButton) { scrollWidth -= kXHStoreManagerItemWidth; } UIScrollView *sectionBarScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, scrollWidth, CGRectGetHeight(self.bounds))]; [sectionBarScrollView setScrollsToTop:NO]; sectionBarScrollView.showsVerticalScrollIndicator = NO; sectionBarScrollView.showsHorizontalScrollIndicator = NO; sectionBarScrollView.pagingEnabled = NO; [self addSubview:sectionBarScrollView]; _sectionBarScrollView = sectionBarScrollView; } if (self.isShowEmotionStoreButton) { UIButton *storeManagerItemButton = [self cratedButton]; CGRect storeManagerItemButtonFrame = storeManagerItemButton.frame; storeManagerItemButtonFrame.origin.x = CGRectGetWidth(self.bounds) - kXHStoreManagerItemWidth; storeManagerItemButton.frame = storeManagerItemButtonFrame; [storeManagerItemButton setTitle:@"商店" forState:UIControlStateNormal]; [storeManagerItemButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [self addSubview:storeManagerItemButton]; _storeManagerItemButton = storeManagerItemButton; } } - (instancetype)initWithFrame:(CGRect)frame showEmotionStoreButton:(BOOL)isShowEmotionStoreButtoned { self = [super initWithFrame:frame]; if (self) { // Initialization code self.isShowEmotionStoreButton = isShowEmotionStoreButtoned; [self setup]; } return self; } - (void)dealloc { self.emotionManagers = nil; } - (void)willMoveToSuperview:(UIView *)newSuperview { if (newSuperview) { [self reloadData]; } } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ @end