From 2126223858cafcbc3fbb0575291254f98ee155a2 Mon Sep 17 00:00:00 2001 From: lijingcheng Date: Mon, 18 Jul 2016 15:28:17 +0800 Subject: [PATCH] support in the cell --- .../JCTagListView.xcodeproj/project.pbxproj | 12 ++++ Example/JCTagListView/JCTableViewCell.h | 16 ++++++ Example/JCTagListView/JCTableViewCell.m | 26 +++++++++ Example/JCTagListView/JCTableViewController.h | 13 +++++ Example/JCTagListView/JCTableViewController.m | 57 +++++++++++++++++++ Example/JCTagListView/JCViewController.m | 5 ++ Example/JCTagListView/Main.storyboard | 50 ++++++++++++++-- JCTagListView.podspec | 2 +- Pod/Classes/JCCollectionViewTagFlowLayout.h | 2 + Pod/Classes/JCCollectionViewTagFlowLayout.m | 29 ++++++++++ Pod/Classes/JCTagListView.m | 1 + 11 files changed, 207 insertions(+), 6 deletions(-) create mode 100644 Example/JCTagListView/JCTableViewCell.h create mode 100644 Example/JCTagListView/JCTableViewCell.m create mode 100644 Example/JCTagListView/JCTableViewController.h create mode 100644 Example/JCTagListView/JCTableViewController.m diff --git a/Example/JCTagListView.xcodeproj/project.pbxproj b/Example/JCTagListView.xcodeproj/project.pbxproj index 0ac2ed8..00a2635 100644 --- a/Example/JCTagListView.xcodeproj/project.pbxproj +++ b/Example/JCTagListView.xcodeproj/project.pbxproj @@ -23,6 +23,8 @@ 7D8F1BC1A8CB6A15727E3215 /* libPods-JCTagListView_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8200F925C0382BC1AFCC5937 /* libPods-JCTagListView_Tests.a */; }; 8045718C51A6AEFCA61B6A0A /* libPods-JCTagListView_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 172ADC17AD2C20DA8DF003E7 /* libPods-JCTagListView_Example.a */; }; 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; + F37F854F1D3CA94F00365348 /* JCTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F37F854E1D3CA94F00365348 /* JCTableViewController.m */; }; + F37F85521D3CA97000365348 /* JCTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F37F85511D3CA97000365348 /* JCTableViewCell.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -65,6 +67,10 @@ 62AE6E6A39D7B32D65B93E59 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 8200F925C0382BC1AFCC5937 /* libPods-JCTagListView_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JCTagListView_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + F37F854D1D3CA94F00365348 /* JCTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCTableViewController.h; sourceTree = ""; }; + F37F854E1D3CA94F00365348 /* JCTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCTableViewController.m; sourceTree = ""; }; + F37F85501D3CA97000365348 /* JCTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JCTableViewCell.h; sourceTree = ""; }; + F37F85511D3CA97000365348 /* JCTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JCTableViewCell.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -134,6 +140,10 @@ 6003F59D195388D20070C39A /* JCAppDelegate.m */, 6003F5A5195388D20070C39A /* JCViewController.h */, 6003F5A6195388D20070C39A /* JCViewController.m */, + F37F854D1D3CA94F00365348 /* JCTableViewController.h */, + F37F854E1D3CA94F00365348 /* JCTableViewController.m */, + F37F85501D3CA97000365348 /* JCTableViewCell.h */, + F37F85511D3CA97000365348 /* JCTableViewCell.m */, 6003F594195388D20070C39A /* Supporting Files */, ); name = "Example for JCTagListView"; @@ -358,8 +368,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F37F85521D3CA97000365348 /* JCTableViewCell.m in Sources */, 6003F59E195388D20070C39A /* JCAppDelegate.m in Sources */, 6003F5A7195388D20070C39A /* JCViewController.m in Sources */, + F37F854F1D3CA94F00365348 /* JCTableViewController.m in Sources */, 6003F59A195388D20070C39A /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Example/JCTagListView/JCTableViewCell.h b/Example/JCTagListView/JCTableViewCell.h new file mode 100644 index 0000000..40e91ba --- /dev/null +++ b/Example/JCTagListView/JCTableViewCell.h @@ -0,0 +1,16 @@ +// +// JCTableViewCell.h +// JCTagListView +// +// Created by 李京城 on 16/7/18. +// Copyright © 2016年 lijingcheng. All rights reserved. +// + +#import +#import "JCTagListView.h" + +@interface JCTableViewCell : UITableViewCell + +@property (nonatomic, copy) NSArray *tags; + +@end diff --git a/Example/JCTagListView/JCTableViewCell.m b/Example/JCTagListView/JCTableViewCell.m new file mode 100644 index 0000000..3ce4171 --- /dev/null +++ b/Example/JCTagListView/JCTableViewCell.m @@ -0,0 +1,26 @@ +// +// JCTableViewCell.m +// JCTagListView +// +// Created by 李京城 on 16/7/18. +// Copyright © 2016年 lijingcheng. All rights reserved. +// + +#import "JCTableViewCell.h" + +@interface JCTableViewCell () + +@property (nonatomic, weak) IBOutlet JCTagListView *tagListView; + +@end + +@implementation JCTableViewCell + +- (void)setTags:(NSArray *)tags +{ + _tags = tags; + + self.tagListView.tags = [NSMutableArray arrayWithArray:tags]; +} + +@end diff --git a/Example/JCTagListView/JCTableViewController.h b/Example/JCTagListView/JCTableViewController.h new file mode 100644 index 0000000..917a875 --- /dev/null +++ b/Example/JCTagListView/JCTableViewController.h @@ -0,0 +1,13 @@ +// +// JCTableViewController.h +// JCTagListView +// +// Created by 李京城 on 16/7/18. +// Copyright © 2016年 lijingcheng. All rights reserved. +// + +#import + +@interface JCTableViewController : UITableViewController + +@end diff --git a/Example/JCTagListView/JCTableViewController.m b/Example/JCTagListView/JCTableViewController.m new file mode 100644 index 0000000..1aa15bb --- /dev/null +++ b/Example/JCTagListView/JCTableViewController.m @@ -0,0 +1,57 @@ +// +// JCTableViewController.m +// JCTagListView +// +// Created by 李京城 on 16/7/18. +// Copyright © 2016年 lijingcheng. All rights reserved. +// + +#import "JCTableViewController.h" +#import "JCTableViewCell.h" +#import "JCCollectionViewTagFlowLayout.h" + +@interface JCTableViewController () + +@property (nonatomic, copy) NSArray *allTags; +@property (nonatomic, strong) NSMutableArray *cellHeights; + +@property (nonatomic, strong) JCCollectionViewTagFlowLayout *layout; + +@end + +@implementation JCTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.cellHeights = [NSMutableArray array]; + self.layout = [[JCCollectionViewTagFlowLayout alloc] init]; + + self.tableView.tableFooterView = [UIView new]; + + self.allTags = @[@[@"NSString", @"NSMutableString", @"NSArray", @"UIAlertView", @"UITapGestureRecognizer", @"IBOutlet", @"IBAction", @"id", @"UIView", @"UIStatusBar", @"UITableViewController", @"UIStepper", @"UISegmentedControl", @"UICollectionViewController", @"UISearchBar", @"UIToolbar", @"UIPageControl"], @[@"UIActionSheet", @"NSMutableArray", @"NSDictionary", @"NSMutableDictionary", @"NSSet", @"NSMutableSet", @"NSData", @"NSMutableData", @"NSDate", @"UICollectionView", @"UIViewController", @"NSCalendar"], @[@"UITextField", @"UITextView", @"UIImageView", @"UITableView"], @[@"UIButton", @"UILabel"]]; + + for (NSArray *tags in self.allTags) { + [self.cellHeights addObject:@([self.layout calculateContentHeight:tags])]; + } +} + +#pragma mark - Table view data source + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.allTags.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [self.cellHeights[indexPath.row] floatValue]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + JCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellId" forIndexPath:indexPath]; + cell.tags = self.allTags[indexPath.row]; + + return cell; +} + +@end diff --git a/Example/JCTagListView/JCViewController.m b/Example/JCTagListView/JCViewController.m index 2d2add2..7749264 100644 --- a/Example/JCTagListView/JCViewController.m +++ b/Example/JCTagListView/JCViewController.m @@ -8,6 +8,7 @@ #import "JCViewController.h" #import "JCTagListView.h" +#import "JCTableViewController.h" @interface JCViewController () @@ -44,6 +45,10 @@ - (IBAction)delete:(id)sender [self.tagListView.selectedTags removeAllObjects]; [self.tagListView.collectionView reloadData]; + + JCTableViewController *tableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"JCTableViewController"]; + + [self.navigationController pushViewController:tableVC animated:YES]; } @end diff --git a/Example/JCTagListView/Main.storyboard b/Example/JCTagListView/Main.storyboard index 6663ebc..71fd2de 100644 --- a/Example/JCTagListView/Main.storyboard +++ b/Example/JCTagListView/Main.storyboard @@ -1,8 +1,8 @@ - + - + @@ -12,7 +12,6 @@ - @@ -36,11 +35,9 @@ - - @@ -64,6 +61,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JCTagListView.podspec b/JCTagListView.podspec index 2dad72f..6ef5543 100644 --- a/JCTagListView.podspec +++ b/JCTagListView.podspec @@ -9,7 +9,7 @@ Pod::Spec.new do |s| s.name = "JCTagListView" - s.version = "0.0.9" + s.version = "0.1.0" s.summary = "Support delete tags and settings tags color." s.homepage = "http://lijingcheng.github.io/" # s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" diff --git a/Pod/Classes/JCCollectionViewTagFlowLayout.h b/Pod/Classes/JCCollectionViewTagFlowLayout.h index 453c1c8..03c6b6a 100644 --- a/Pod/Classes/JCCollectionViewTagFlowLayout.h +++ b/Pod/Classes/JCCollectionViewTagFlowLayout.h @@ -10,4 +10,6 @@ @interface JCCollectionViewTagFlowLayout : UICollectionViewFlowLayout +- (CGFloat)calculateContentHeight:(NSArray *)tags; + @end diff --git a/Pod/Classes/JCCollectionViewTagFlowLayout.m b/Pod/Classes/JCCollectionViewTagFlowLayout.m index 2cf5b81..b15ae0d 100644 --- a/Pod/Classes/JCCollectionViewTagFlowLayout.m +++ b/Pod/Classes/JCCollectionViewTagFlowLayout.m @@ -128,4 +128,33 @@ - (CGSize)itemSizeForIndexPath:(NSIndexPath *)indexPath return self.itemSize; } +- (CGFloat)calculateContentHeight:(NSArray *)tags +{ + CGFloat contentHeight = self.sectionInset.top + self.itemSize.height; + + CGFloat originX = self.sectionInset.left; + CGFloat originY = self.sectionInset.top; + + for (NSInteger i = 0; i < tags.count; i++) { + CGSize maxSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - self.sectionInset.left - self.sectionInset.right, self.itemSize.height); + + CGRect frame = [tags[i] boundingRectWithSize:maxSize options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]} context:nil]; + + CGSize itemSize = CGSizeMake(frame.size.width + 20.0f, self.itemSize.height); + + if ((originX + itemSize.width + self.sectionInset.right/2) > [UIScreen mainScreen].bounds.size.width) { + originX = self.sectionInset.left; + originY += itemSize.height + self.minimumLineSpacing; + + contentHeight += itemSize.height + self.minimumLineSpacing; + } + + originX += itemSize.width + self.minimumInteritemSpacing; + } + + contentHeight += self.sectionInset.bottom; + + return contentHeight; +} + @end diff --git a/Pod/Classes/JCTagListView.m b/Pod/Classes/JCTagListView.m index e795535..3327790 100644 --- a/Pod/Classes/JCTagListView.m +++ b/Pod/Classes/JCTagListView.m @@ -62,6 +62,7 @@ - (void)setup _collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:layout]; _collectionView.delegate = self; _collectionView.dataSource = self; + _collectionView.scrollEnabled = NO; _collectionView.showsHorizontalScrollIndicator = NO; _collectionView.showsVerticalScrollIndicator = NO; _collectionView.backgroundColor = [UIColor clearColor];