ifish/Ifish/UMCommunity/UMCommunitySDK/UMCommunityUI/Common/Feed/UMComHorizontalTableView.m

284 lines
9.3 KiB
Objective-C

//
// HorizontalTableView.m
// TableViewHorizontalScroll
//
// Created by Umeng on 14-6-16.
// Copyright (c) 2014年 Umeng 董剑雄. All rights reserved.
//
#import "UMComHorizontalTableView.h"
#import "UMComShowToast.h"
#import "UMComImageView.h"
#import <UMComDataStorage/UMComUser.h>
#import "UMComUserListDataController.h"
#import <UMComFoundation/UMComKit+Color.h>
#import <UMCommunitySDK/UMComSession.h>
#define USING_UMComHorizontalTableView_MORESHOW //用于显示用户大于4个的时候显示MORE
@interface UMComHorizontalTableView ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) UILabel *titlelabel;
@property (nonatomic, strong) UILabel *nouserTip;
#ifdef USING_UMComHorizontalTableView_MORESHOW
@property (nonatomic, strong) NSArray *userListDisplay;
#endif
@end
@implementation UMComHorizontalTableView
#pragma mark - 初始化方法
- (void)initData
{
self.delegate = self;
self.dataSource = self;
//tableview逆时针旋转90度。
self.rowHeight = self.frame.size.height/4;
self.transform = CGAffineTransformMakeRotation(-M_PI / 2);
self.showsHorizontalScrollIndicator = YES;
self.scrollsToTop = NO;
// scrollbar 不显示
self.showsVerticalScrollIndicator = NO;
self.separatorStyle = UITableViewCellSeparatorStyleNone;
self.userList = [NSArray array];
self.titlelabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 60, 12)];
self.titlelabel.backgroundColor = [UIColor clearColor];
self.titlelabel.text = UMComLocalizedString(@"um_com_relatedUser", @"相关用户");
self.titlelabel.textColor = UMComColorWithHexString(FontColorGray);
self.titlelabel.center = CGPointMake(90, 35);
self.titlelabel.font = UMComFontNotoSansLightWithSafeSize(12);
self.titlelabel.transform = CGAffineTransformMakeRotation(M_PI / 2);
[self addSubview:self.titlelabel];
[self creatNouserTipView];
}
- (void)creatNouserTipView
{
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 300, 40)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.text = UMComLocalizedString(@"um_com_no_related_user", @"没有找到相关用户");
label.font = UMComFontNotoSansLightWithSafeSize(17);
label.textColor = UMComColorWithHexString(FontColorGray);
label.transform = CGAffineTransformMakeRotation(M_PI / 2);
label.center = CGPointMake(self.frame.size.height/2, self.frame.size.width/2);
[self addSubview:label];
label.hidden = YES;
self.nouserTip = label;
}
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
self = [super initWithFrame:frame style:style];
if (self) {
// Initialization code
[self initData];
}
return self;
}
#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (self.userList.count == 0) {
self.titlelabel.hidden = YES;
return 0;
}
self.titlelabel.hidden = NO;
#ifdef USING_UMComHorizontalTableView_MORESHOW
if (self.userList.count <= 4) {
self.userListDisplay = self.userList;
return self.userListDisplay.count;
}
else{
self.userListDisplay = [self.userList subarrayWithRange:NSMakeRange(0,3)];
return self.userListDisplay.count + 1;
}
#else
return self.userList.count + 1;
#endif
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *cellId = @"cellId";
HorizontalTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[HorizontalTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
CGFloat imageHeight = tableView.frame.size.height/5*2;
CGFloat titleBtHeight = imageHeight/2;
CGFloat originY = titleBtHeight;
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.userImageView.frame = CGRectMake(0, originY, imageHeight, imageHeight);
cell.userImageView.center = CGPointMake(tableView.rowHeight/2, imageHeight/2+originY);
cell.titleLabel.frame = CGRectMake(0, imageHeight+originY+2, tableView.rowHeight, titleBtHeight);
cell.userImageView.clipsToBounds = YES;
cell.userImageView.layer.cornerRadius = cell.userImageView.frame.size.width/2;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(didSelecteduser:)];
[cell addGestureRecognizer:tap];
}
#ifdef USING_UMComHorizontalTableView_MORESHOW
if (indexPath.row < self.userListDisplay.count) {
UMComUser *user = self.userListDisplay[indexPath.row];
#else
if (indexPath.row < self.userList.count) {
UMComUser *user = self.userList[indexPath.row];
#endif
[cell setUser:user];
}else{
cell.userImageView.image = UMComImageWithImageName(@"all_more");
cell.titleLabel.text = UMComLocalizedString(@"um_com_more", @"更多");
}
return cell;
}
- (void)didSelecteduser:(UITapGestureRecognizer *)tap
{
if (self.didSelectedUser) {
HorizontalTableViewCell *cell = (HorizontalTableViewCell *)tap.view;
NSIndexPath *indexPath = [self indexPathForCell:cell];
#ifdef USING_UMComHorizontalTableView_MORESHOW
if (indexPath.row < self.userListDisplay.count) {
self.didSelectedUser(self.userListDisplay[indexPath.row]);
#else
if (indexPath.row < self.userList.count) {
self.didSelectedUser(self.userList[indexPath.row]);
#endif
}else{
self.didSelectedUser(nil);
}
}
}
- (void)searchUsersWithKeyWord:(NSString *)keyWord
{
/*
self.userFetchRequest = [[UMComSearchUserRequest alloc]initWithKeywords:keyWord count:BatchSize];
__weak UMComHorizontalTableView *weakSelf = self;
[self.userFetchRequest fetchRequestFromServer:^(NSArray *data, BOOL haveNextPage, NSError *error) {
weakSelf.userList = data;
if (error) {
if([UMComSession sharedInstance].isLogin)
{
//登陆状态下,显示提示
weakSelf.nouserTip.hidden = NO;
}
else
{
//未登陆状态下,隐藏提示
weakSelf.nouserTip.hidden = YES;
}
[UMComShowToast showFetchResultTipWithError:error];
}else{
if (data.count == 0) {
weakSelf.nouserTip.hidden = NO;
}else{
weakSelf.nouserTip.hidden = YES;
}
}
[weakSelf reloadData];
}];
*/
if(!self.searchUserListDataController)
{
self.searchUserListDataController = [[UMComSearchUserListDataController alloc] initWithCount:UMCom_Limit_Page_Count keyWord:keyWord];
}
else{
self.searchUserListDataController.keyWord = keyWord;
}
__weak UMComHorizontalTableView *weakSelf = self;
[self.searchUserListDataController refreshNewDataCompletion:^(NSArray *data, NSError *error) {
weakSelf.userList = data;
if (error) {
if([UMComSession sharedInstance].isLogin)
{
//登陆状态下,显示提示
weakSelf.nouserTip.hidden = NO;
}
else
{
//未登陆状态下,隐藏提示
weakSelf.nouserTip.hidden = YES;
}
[UMComShowToast showFetchResultTipWithError:error];
}else{
if (data.count == 0) {
weakSelf.nouserTip.hidden = NO;
}else{
weakSelf.nouserTip.hidden = YES;
}
}
[weakSelf reloadData];
}];
}
@end
@implementation HorizontalTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.transform = CGAffineTransformMakeRotation(M_PI / 2);
CGFloat imageHeight = self.frame.size.width *3/4;
CGFloat titleBtHeight = imageHeight/3;
self.userImageView = [[[UMComImageView imageViewClassName] alloc]initWithFrame:CGRectMake(0, 0, imageHeight, imageHeight)];
self.titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, imageHeight, self.frame.size.height, titleBtHeight)];
self.titleLabel.textAlignment = NSTextAlignmentCenter;
self.titleLabel.font = UMComFontNotoSansLightWithSafeSize(14);
[self.titleLabel setTextColor:[UIColor grayColor]];
self.userImageView.userInteractionEnabled = YES;
self.titleLabel.userInteractionEnabled = YES;
[self addSubview:self.titleLabel];
[self addSubview:self.userImageView];
}
return self;
}
- (void)setUser:(UMComUser *)user
{
_user = user;
self.titleLabel.text = user.name;
NSString *iconUrl = [user iconUrlStrWithType:UMComIconSmallType];
[self.userImageView setImageURL:iconUrl placeHolderImage:[UMComImageView placeHolderImageGender:user.gender.integerValue]];
}
- (void)awakeFromNib
{
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end