// // MessageCell.m // Juick // // Created by Vitaly Takmazov on 29.10.13. // Copyright (c) 2013 com.juick. All rights reserved. // #import "MessageCell.h" #import "ColorsAndButtons.h" #import "Masonry.h" @interface MessageCell () @property (nonatomic, assign) BOOL didSetupConstraints; @end @implementation MessageCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { [self setBackgroundColor:[UIColor whiteColor]]; self.selectionStyle = UITableViewCellSelectionStyleNone; self.avatar = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; [self.avatar setBackgroundColor:[UIColor clearColor]]; self.titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; [self.titleLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.titleLabel setLineBreakMode:NSLineBreakByTruncatingTail]; [self.titleLabel setNumberOfLines:1]; [self.titleLabel setTextAlignment:NSTextAlignmentLeft]; [self.titleLabel setTextColor:[ColorsAndButtons linkColor]]; [self.titleLabel setBackgroundColor:[UIColor clearColor]]; self.timestampLabel = [[UILabel alloc] initWithFrame:CGRectZero]; [self.timestampLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.timestampLabel setLineBreakMode:NSLineBreakByTruncatingTail]; [self.timestampLabel setNumberOfLines:1]; [self.timestampLabel setTextAlignment:NSTextAlignmentLeft]; [self.timestampLabel setTextColor:[UIColor grayColor]]; [self.timestampLabel setBackgroundColor:[UIColor clearColor]]; self.bodyLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero]; self.bodyLabel.dataDetectorTypes = NSTextCheckingTypeLink; self.bodyLabel.delegate = self; [self.bodyLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.bodyLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; [self.bodyLabel setLineBreakMode:NSLineBreakByTruncatingTail]; [self.bodyLabel setNumberOfLines:0]; [self.bodyLabel setTextAlignment:NSTextAlignmentLeft]; [self.bodyLabel setTextColor:[UIColor darkGrayColor]]; [self.bodyLabel setBackgroundColor:[UIColor clearColor]]; self.summaryLabel = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero]; [self.summaryLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.summaryLabel setLineBreakMode:NSLineBreakByTruncatingTail]; [self.summaryLabel setNumberOfLines:1]; [self.summaryLabel setTextAlignment:NSTextAlignmentLeft]; [self.summaryLabel setTextColor:[UIColor grayColor]]; [self.summaryLabel setBackgroundColor:[UIColor clearColor]]; self.attach = [[UIImageView alloc] initWithFrame:CGRectZero]; [self.attach setBackgroundColor:[UIColor clearColor]]; self.attach.contentMode = UIViewContentModeScaleAspectFit; [self.contentView addSubview:self.avatar]; [self.contentView addSubview:self.titleLabel]; [self.contentView addSubview:self.timestampLabel]; [self.contentView addSubview:self.bodyLabel]; [self.contentView addSubview:self.attach]; [self.contentView addSubview:self.summaryLabel]; [self updateFonts]; } return self; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } - (void)updateConstraints { [super updateConstraints]; if (self.didSetupConstraints) return; UIEdgeInsets padding = UIEdgeInsetsMake(10, 20, 10, 20); [self.avatar makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView.top).with.offset(padding.top); make.leading.equalTo(self.contentView.leading).with.offset(padding.left); make.width.equalTo(@32); make.height.equalTo(@32); }]; [self.titleLabel makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.avatar.trailing).with.offset(padding.right); make.top.equalTo(self.contentView.top).with.offset(padding.top); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right); }]; [self.timestampLabel makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.avatar.trailing).with.offset(padding.left); make.top.equalTo(self.titleLabel.bottom).with.offset(padding.top /2); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right); }]; [self.bodyLabel makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.contentView.leading).with.offset(padding.left); make.top.equalTo(self.timestampLabel.bottom).with.offset(padding.top); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right); make.bottom.equalTo(self.attach.top).with.offset(-padding.bottom); }]; [self.attach makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.contentView.leading).with.offset(padding.left); make.bottom.equalTo(self.summaryLabel.top).with.offset(-padding.bottom); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right); make.top.equalTo(self.bodyLabel.bottom).with.offset(padding.top); }]; [self.summaryLabel makeConstraints:^(MASConstraintMaker *make) { make.leading.equalTo(self.contentView.leading).with.offset(padding.left); make.bottom.equalTo(self.contentView.bottom).with.offset(-padding.bottom); make.trailing.equalTo(self.contentView.trailing).with.offset(-padding.right); }]; self.didSetupConstraints = YES; } - (void)updateFonts { if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { self.titleLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; self.bodyLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; self.timestampLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote]; self.summaryLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleFootnote]; } } - (void) bind:(Message *)msg { [self.avatar setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://i.juick.com/as/%@.png", msg.userID]]]; self.titleLabel.text = msg.user; self.timestampLabel.text = msg.timestamp; if (msg.repliesCount > 0) { self.summaryLabel.text = [NSString stringWithFormat:@"%@ replies by %@", msg.repliesCount, msg.repliesBy]; } else { self.summaryLabel.text = nil; } self.bodyLabel.text = [msg.text stringByDecodingHTMLEntities]; if ([msg.tags count] > 0) { self.bodyLabel.text = [[NSString alloc] initWithFormat:@"%@\n%@", [msg.tags componentsJoinedByString:@", "], [msg.text stringByDecodingHTMLEntities]]; } if ([msg.attach length] > 0) { [self.attach setImageWithURL:[NSURL URLWithString:msg.attach]]; } else { self.attach.image = nil; } } - (void) attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { [[UIApplication sharedApplication] openURL:url]; } @end