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.
183 lines
6.0 KiB
183 lines
6.0 KiB
//
|
|
// PTTableContentViewController.m
|
|
// PTDatabaseReader
|
|
//
|
|
// Created by Peng Tao on 15/11/23.
|
|
// Copyright © 2015年 Peng Tao. All rights reserved.
|
|
//
|
|
|
|
#import "FLEXTableContentViewController.h"
|
|
#import "FLEXMultiColumnTableView.h"
|
|
#import "FLEXWebViewController.h"
|
|
|
|
|
|
@interface FLEXTableContentViewController ()<FLEXMultiColumnTableViewDataSource, FLEXMultiColumnTableViewDelegate>
|
|
|
|
@property (nonatomic, strong) FLEXMultiColumnTableView *multiColumView;
|
|
|
|
@end
|
|
|
|
@implementation FLEXTableContentViewController
|
|
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
self.edgesForExtendedLayout = UIRectEdgeNone;
|
|
[self.view addSubview:self.multiColumView];
|
|
}
|
|
|
|
- (void)viewWillAppear:(BOOL)animated
|
|
{
|
|
[super viewWillAppear:animated];
|
|
[self.multiColumView reloadData];
|
|
}
|
|
|
|
#pragma mark -
|
|
|
|
#pragma mark init SubView
|
|
- (FLEXMultiColumnTableView *)multiColumView {
|
|
if (!_multiColumView) {
|
|
_multiColumView = [[FLEXMultiColumnTableView alloc] initWithFrame:
|
|
CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
|
|
|
|
_multiColumView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
|
|
_multiColumView.backgroundColor = [UIColor whiteColor];
|
|
_multiColumView.dataSource = self;
|
|
_multiColumView.delegate = self;
|
|
}
|
|
return _multiColumView;
|
|
}
|
|
#pragma mark MultiColumnTableView DataSource
|
|
|
|
- (NSInteger)numberOfColumnsInTableView:(FLEXMultiColumnTableView *)tableView
|
|
{
|
|
return self.columnsArray.count;
|
|
}
|
|
- (NSInteger)numberOfRowsInTableView:(FLEXMultiColumnTableView *)tableView
|
|
{
|
|
return self.contentsArray.count;
|
|
}
|
|
|
|
|
|
- (NSString *)columnNameInColumn:(NSInteger)column
|
|
{
|
|
return self.columnsArray[column];
|
|
}
|
|
|
|
|
|
- (NSString *)rowNameInRow:(NSInteger)row
|
|
{
|
|
return [NSString stringWithFormat:@"%ld",(long)row];
|
|
}
|
|
|
|
- (NSString *)contentAtColumn:(NSInteger)column row:(NSInteger)row
|
|
{
|
|
if (self.contentsArray.count > row) {
|
|
NSDictionary<NSString *, id> *dic = self.contentsArray[row];
|
|
if (self.contentsArray.count > column) {
|
|
return [NSString stringWithFormat:@"%@",[dic objectForKey:self.columnsArray[column]]];
|
|
}
|
|
}
|
|
return @"";
|
|
}
|
|
|
|
- (NSArray *)contentAtRow:(NSInteger)row
|
|
{
|
|
NSMutableArray *result = [NSMutableArray array];
|
|
if (self.contentsArray.count > row) {
|
|
NSDictionary<NSString *, id> *dic = self.contentsArray[row];
|
|
for (int i = 0; i < self.columnsArray.count; i ++) {
|
|
[result addObject:dic[self.columnsArray[i]]];
|
|
}
|
|
return result;
|
|
}
|
|
return nil;
|
|
}
|
|
|
|
- (CGFloat)multiColumnTableView:(FLEXMultiColumnTableView *)tableView
|
|
heightForContentCellInRow:(NSInteger)row
|
|
{
|
|
return 40;
|
|
}
|
|
|
|
- (CGFloat)multiColumnTableView:(FLEXMultiColumnTableView *)tableView
|
|
widthForContentCellInColumn:(NSInteger)column
|
|
{
|
|
return 120;
|
|
}
|
|
|
|
- (CGFloat)heightForTopHeaderInTableView:(FLEXMultiColumnTableView *)tableView
|
|
{
|
|
return 40;
|
|
}
|
|
|
|
- (CGFloat)widthForLeftHeaderInTableView:(FLEXMultiColumnTableView *)tableView
|
|
{
|
|
NSString *str = [NSString stringWithFormat:@"%lu",(unsigned long)self.contentsArray.count];
|
|
NSDictionary<NSString *, id> *attrs = @{@"NSFontAttributeName":[UIFont systemFontOfSize:17.0]};
|
|
CGSize size = [str boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 14)
|
|
options:NSStringDrawingUsesLineFragmentOrigin
|
|
attributes:attrs context:nil].size;
|
|
return size.width + 20;
|
|
}
|
|
|
|
#pragma mark -
|
|
#pragma mark MultiColumnTableView Delegate
|
|
|
|
|
|
- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapLabelWithText:(NSString *)text
|
|
{
|
|
FLEXWebViewController * detailViewController = [[FLEXWebViewController alloc] initWithText:text];
|
|
[self.navigationController pushViewController:detailViewController animated:YES];
|
|
}
|
|
|
|
- (void)multiColumnTableView:(FLEXMultiColumnTableView *)tableView didTapHeaderWithText:(NSString *)text sortType:(FLEXTableColumnHeaderSortType)sortType
|
|
{
|
|
|
|
NSArray<NSDictionary<NSString *, id> *> *sortContentData = [self.contentsArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary<NSString *, id> * obj1, NSDictionary<NSString *, id> * obj2) {
|
|
|
|
if ([obj1 objectForKey:text] == [NSNull null]) {
|
|
return NSOrderedAscending;
|
|
}
|
|
if ([obj2 objectForKey:text] == [NSNull null]) {
|
|
return NSOrderedDescending;
|
|
}
|
|
|
|
if (![[obj1 objectForKey:text] respondsToSelector:@selector(compare:)] && ![[obj2 objectForKey:text] respondsToSelector:@selector(compare:)]) {
|
|
return NSOrderedSame;
|
|
}
|
|
|
|
NSComparisonResult result = [[obj1 objectForKey:text] compare:[obj2 objectForKey:text]];
|
|
|
|
return result;
|
|
}];
|
|
if (sortType == FLEXTableColumnHeaderSortTypeDesc) {
|
|
NSEnumerator *contentReverseEvumerator = [sortContentData reverseObjectEnumerator];
|
|
sortContentData = [NSArray arrayWithArray:[contentReverseEvumerator allObjects]];
|
|
}
|
|
|
|
self.contentsArray = sortContentData;
|
|
[self.multiColumView reloadData];
|
|
}
|
|
|
|
#pragma mark -
|
|
#pragma mark About Transition
|
|
|
|
- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection
|
|
withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
|
|
{
|
|
[super willTransitionToTraitCollection:newCollection
|
|
withTransitionCoordinator:coordinator];
|
|
[coordinator animateAlongsideTransition:^(id <UIViewControllerTransitionCoordinatorContext> context) {
|
|
if (newCollection.verticalSizeClass == UIUserInterfaceSizeClassCompact) {
|
|
|
|
self->_multiColumView.frame = CGRectMake(0, 32, self.view.frame.size.width, self.view.frame.size.height - 32);
|
|
}
|
|
else {
|
|
self->_multiColumView.frame = CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64);
|
|
}
|
|
[self.view setNeedsLayout];
|
|
} completion:nil];
|
|
}
|
|
|
|
|
|
@end
|