You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
7.8 KiB
232 lines
7.8 KiB
// |
|
// XHAlbumLikesCommentsView.m |
|
// MessageDisplayKitWeChatExample |
|
// |
|
// Created by Jack_iMac on 15/2/28. |
|
// Copyright (c) 2015年 iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal. All rights reserved. |
|
// |
|
|
|
#import "XHAlbumLikesCommentsView.h" |
|
|
|
#define kXHAlbumLikeLabelBaseTag 100 |
|
|
|
@interface XHAlbumCommentTableViewCell : UITableViewCell |
|
|
|
@property (nonatomic, strong) UILabel *userNameLabel; |
|
|
|
@property (nonatomic, strong) UILabel *commentLabel; |
|
|
|
@property (nonatomic, strong) id item; |
|
|
|
@property (nonatomic, strong) NSIndexPath *indexPath; |
|
|
|
- (void)setupItem:(id)item atIndexPath:(NSIndexPath *)indexPath; |
|
|
|
@end |
|
|
|
@implementation XHAlbumCommentTableViewCell |
|
|
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { |
|
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; |
|
if (self) { |
|
self.selectionStyle = UITableViewCellSelectionStyleNone; |
|
self.backgroundColor = [UIColor clearColor]; |
|
self.contentView.backgroundColor = [UIColor clearColor]; |
|
|
|
[self.contentView addSubview:self.userNameLabel]; |
|
[self.contentView addSubview:self.commentLabel]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)layoutSubviews { |
|
[super layoutSubviews]; |
|
|
|
CGRect userNameLabelFrame = self.userNameLabel.frame; |
|
|
|
CGRect commentLabelFrame = self.commentLabel.frame; |
|
commentLabelFrame.origin.x = CGRectGetMaxX(userNameLabelFrame); |
|
commentLabelFrame.size = CGSizeMake(100, 16); |
|
self.commentLabel.frame = commentLabelFrame; |
|
} |
|
|
|
- (void)setupItem:(id)item atIndexPath:(NSIndexPath *)indexPath { |
|
self.item = item; |
|
self.indexPath = indexPath; |
|
|
|
self.userNameLabel.text = @"Jack"; |
|
self.commentLabel.text = [NSString stringWithFormat:@": %@", item]; |
|
} |
|
|
|
#pragma mark - Propertys |
|
|
|
- (UILabel *)userNameLabel { |
|
if (!_userNameLabel) { |
|
_userNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(4, 0, 22, 16)]; |
|
_userNameLabel.textColor = [UIColor blueColor]; |
|
_userNameLabel.font = [UIFont systemFontOfSize:10]; |
|
} |
|
return _userNameLabel; |
|
} |
|
|
|
- (UILabel *)commentLabel { |
|
if (!_commentLabel) { |
|
_commentLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
|
_commentLabel.textColor = [UIColor blackColor]; |
|
_commentLabel.font = [UIFont systemFontOfSize:10]; |
|
} |
|
return _commentLabel; |
|
} |
|
|
|
@end |
|
|
|
@interface XHAlbumLikesCommentsView () <UITableViewDataSource> |
|
|
|
@property (nonatomic, strong) UIImageView *backgroundImageView; |
|
|
|
@property (nonatomic, strong) UIView *likeContainerView; |
|
@property (nonatomic, strong) UIImageView *likeIconImageView; |
|
|
|
@property (nonatomic, strong) UITableView *commmentTableView; |
|
|
|
@end |
|
|
|
@implementation XHAlbumLikesCommentsView |
|
|
|
#pragma mark - Life Cycle |
|
|
|
- (instancetype)initWithFrame:(CGRect)frame { |
|
self = [super initWithFrame:frame]; |
|
if (self) { |
|
self.clipsToBounds = YES; |
|
[self addSubview:self.backgroundImageView]; |
|
[self addSubview:self.likeContainerView]; |
|
[self addSubview:self.commmentTableView]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)layoutSubviews { |
|
[super layoutSubviews]; |
|
|
|
} |
|
|
|
- (void)updateUserInterface { |
|
BOOL shouldShowLike = self.likes.count > 0; |
|
BOOL shouldShowComment = self.comments.count > 0; |
|
|
|
self.likeContainerView.hidden = !shouldShowLike; |
|
self.commmentTableView.hidden = !shouldShowComment; |
|
|
|
if (!shouldShowLike && !shouldShowComment) { |
|
self.frame = CGRectZero; |
|
return; |
|
} |
|
|
|
CGRect likeContainerViewFrame = CGRectZero; |
|
|
|
if (shouldShowLike) { |
|
likeContainerViewFrame = CGRectMake(0, 4, CGRectGetWidth(self.bounds), 14); |
|
self.likeContainerView.frame = likeContainerViewFrame; |
|
} |
|
|
|
CGRect commentTableViewFrame = CGRectZero; |
|
if (shouldShowComment) { |
|
commentTableViewFrame = self.commmentTableView.frame; |
|
commentTableViewFrame.origin.y = CGRectGetMaxY(likeContainerViewFrame) + (shouldShowLike ? 0 : 4); |
|
commentTableViewFrame.size.height = self.comments.count * 16; |
|
self.commmentTableView.frame = commentTableViewFrame; |
|
} |
|
|
|
CGRect frame = self.frame; |
|
frame.size.height = CGRectGetMaxY((shouldShowComment ? commentTableViewFrame : likeContainerViewFrame)); |
|
self.frame = frame; |
|
} |
|
|
|
#pragma mark - Propertys |
|
|
|
- (UIImageView *)backgroundImageView { |
|
if (!_backgroundImageView) { |
|
_backgroundImageView = [[UIImageView alloc] initWithFrame:self.bounds]; |
|
_backgroundImageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
|
_backgroundImageView.image = [[UIImage imageNamed:@"Album_likes_comments_background"] resizableImageWithCapInsets:UIEdgeInsetsMake(8, 24, 8, 8) resizingMode:UIImageResizingModeStretch]; |
|
} |
|
return _backgroundImageView; |
|
} |
|
|
|
- (UIView *)likeContainerView { |
|
if (!_likeContainerView) { |
|
_likeContainerView = [[UIView alloc] initWithFrame:CGRectZero]; |
|
[_likeContainerView addSubview:self.likeIconImageView]; |
|
} |
|
return _likeContainerView; |
|
} |
|
- (UIImageView *)likeIconImageView { |
|
if (!_likeIconImageView) { |
|
_likeIconImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Album_like_icon"]]; |
|
CGRect likeIconImageViewFrame = _likeIconImageView.frame; |
|
likeIconImageViewFrame.origin = CGPointMake(5, 0); |
|
_likeIconImageView.frame = likeIconImageViewFrame; |
|
} |
|
return _likeIconImageView; |
|
} |
|
|
|
- (UITableView *)commmentTableView { |
|
if (!_commmentTableView) { |
|
_commmentTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; |
|
_commmentTableView.separatorColor = [UIColor clearColor]; |
|
_commmentTableView.separatorStyle = UITableViewCellSeparatorStyleNone; |
|
[_commmentTableView registerClass:[XHAlbumCommentTableViewCell class] forCellReuseIdentifier:@"CellIdentifier"]; |
|
_commmentTableView.dataSource = self; |
|
_commmentTableView.scrollEnabled = NO; |
|
_commmentTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth; |
|
_commmentTableView.backgroundColor = [UIColor clearColor]; |
|
_commmentTableView.rowHeight = 16; |
|
} |
|
return _commmentTableView; |
|
} |
|
|
|
#pragma mark - 公开方法 |
|
|
|
- (void)reloadLikes { |
|
for (UIView *view in self.likeContainerView.subviews) { |
|
if ([view isKindOfClass:[UILabel class]]) { |
|
view.hidden = YES; |
|
} |
|
} |
|
CGRect likeLabelFrame = CGRectZero; |
|
for (int i = 0; i < self.likes.count; i ++) { |
|
likeLabelFrame = CGRectMake(CGRectGetMaxX(self.likeIconImageView.frame) + i * 30 + 5, CGRectGetMinY(self.likeIconImageView.frame), 30, CGRectGetHeight(self.likeIconImageView.bounds)); |
|
|
|
UILabel *likeLabel = (UILabel *)[self.likeContainerView viewWithTag:kXHAlbumLikeLabelBaseTag + i]; |
|
if (!likeLabel) { |
|
likeLabel = [[UILabel alloc] initWithFrame:likeLabelFrame]; |
|
} |
|
likeLabel.hidden = NO; |
|
likeLabel.font = [UIFont systemFontOfSize:10]; |
|
likeLabel.textColor = [UIColor blueColor]; |
|
likeLabel.text = [NSString stringWithFormat:@"%@%@", self.likes[i], (i == self.likes.count - 1) ? @"" : @","]; |
|
[self.likeContainerView addSubview:likeLabel]; |
|
} |
|
} |
|
|
|
- (void)reloadData { |
|
[self.commmentTableView reloadData]; |
|
[self reloadLikes]; |
|
[self updateUserInterface]; |
|
} |
|
|
|
#pragma mark - UITableViewDataSource |
|
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
|
return self.comments.count; |
|
} |
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
|
XHAlbumCommentTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath]; |
|
[cell setupItem:self.comments[indexPath.row] atIndexPath:indexPath]; |
|
|
|
return cell; |
|
} |
|
|
|
@end
|
|
|