|
@@ -13,11 +13,11 @@
|
|
|
@interface FLEXMultiColumnTableView ()
|
|
@interface FLEXMultiColumnTableView ()
|
|
|
<UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate, FLEXTableContentCellDelegate>
|
|
<UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate, FLEXTableContentCellDelegate>
|
|
|
|
|
|
|
|
-@property (nonatomic, weak) UIScrollView *contentScrollView;
|
|
|
|
|
-@property (nonatomic, weak) UIScrollView *headerScrollView;
|
|
|
|
|
-@property (nonatomic, weak) UITableView *leftTableView;
|
|
|
|
|
-@property (nonatomic, weak) UITableView *contentTableView;
|
|
|
|
|
-@property (nonatomic, weak) UIView *leftHeader;
|
|
|
|
|
|
|
+@property (nonatomic, strong) UIScrollView *contentScrollView;
|
|
|
|
|
+@property (nonatomic, strong) UIScrollView *headerScrollView;
|
|
|
|
|
+@property (nonatomic, strong) UITableView *leftTableView;
|
|
|
|
|
+@property (nonatomic, strong) UITableView *contentTableView;
|
|
|
|
|
+@property (nonatomic, strong) UIView *leftHeader;
|
|
|
|
|
|
|
|
@property (nonatomic, strong) NSDictionary *sortStatusDict;
|
|
@property (nonatomic, strong) NSDictionary *sortStatusDict;
|
|
|
@property (nonatomic, strong) NSArray *rowData;
|
|
@property (nonatomic, strong) NSArray *rowData;
|
|
@@ -30,104 +30,104 @@ static const CGFloat kColumnMargin = 1;
|
|
|
|
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
|
{
|
|
{
|
|
|
- self = [super initWithFrame:frame];
|
|
|
|
|
- if (self) {
|
|
|
|
|
- [self loadUI];
|
|
|
|
|
- }
|
|
|
|
|
- return self;
|
|
|
|
|
|
|
+ self = [super initWithFrame:frame];
|
|
|
|
|
+ if (self) {
|
|
|
|
|
+ [self loadUI];
|
|
|
|
|
+ }
|
|
|
|
|
+ return self;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)didMoveToSuperview
|
|
- (void)didMoveToSuperview
|
|
|
{
|
|
{
|
|
|
- [super didMoveToSuperview];
|
|
|
|
|
- [self reloadData];
|
|
|
|
|
|
|
+ [super didMoveToSuperview];
|
|
|
|
|
+ [self reloadData];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)layoutSubviews
|
|
- (void)layoutSubviews
|
|
|
{
|
|
{
|
|
|
- [super layoutSubviews];
|
|
|
|
|
-
|
|
|
|
|
- CGFloat width = self.frame.size.width;
|
|
|
|
|
- CGFloat height = self.frame.size.height;
|
|
|
|
|
- CGFloat topheaderHeight = [self topHeaderHeight];
|
|
|
|
|
- CGFloat leftHeaderWidth = [self leftHeaderWidth];
|
|
|
|
|
-
|
|
|
|
|
- CGFloat contentWidth = 0.0;
|
|
|
|
|
- NSInteger rowsCount = [self numberOfColumns];
|
|
|
|
|
- for (int i = 0; i < rowsCount; i++) {
|
|
|
|
|
- contentWidth += [self contentWidthForColumn:i];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- self.leftTableView.frame = CGRectMake(0, topheaderHeight, leftHeaderWidth, height - topheaderHeight);
|
|
|
|
|
- self.headerScrollView.frame = CGRectMake(leftHeaderWidth, 0, width - leftHeaderWidth, topheaderHeight);
|
|
|
|
|
- self.headerScrollView.contentSize = CGSizeMake( self.contentTableView.frame.size.width, self.headerScrollView.frame.size.height);
|
|
|
|
|
- self.contentTableView.frame = CGRectMake(0, 0, contentWidth + [self numberOfColumns] * [self columnMargin] , height - topheaderHeight);
|
|
|
|
|
- self.contentScrollView.frame = CGRectMake(leftHeaderWidth, topheaderHeight, width - leftHeaderWidth, height - topheaderHeight);
|
|
|
|
|
- self.contentScrollView.contentSize = self.contentTableView.frame.size;
|
|
|
|
|
- self.leftHeader.frame = CGRectMake(0, 0, [self leftHeaderWidth], [self topHeaderHeight]);
|
|
|
|
|
|
|
+ [super layoutSubviews];
|
|
|
|
|
+
|
|
|
|
|
+ CGFloat width = self.frame.size.width;
|
|
|
|
|
+ CGFloat height = self.frame.size.height;
|
|
|
|
|
+ CGFloat topheaderHeight = [self topHeaderHeight];
|
|
|
|
|
+ CGFloat leftHeaderWidth = [self leftHeaderWidth];
|
|
|
|
|
+
|
|
|
|
|
+ CGFloat contentWidth = 0.0;
|
|
|
|
|
+ NSInteger rowsCount = [self numberOfColumns];
|
|
|
|
|
+ for (int i = 0; i < rowsCount; i++) {
|
|
|
|
|
+ contentWidth += [self contentWidthForColumn:i];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ self.leftTableView.frame = CGRectMake(0, topheaderHeight, leftHeaderWidth, height - topheaderHeight);
|
|
|
|
|
+ self.headerScrollView.frame = CGRectMake(leftHeaderWidth, 0, width - leftHeaderWidth, topheaderHeight);
|
|
|
|
|
+ self.headerScrollView.contentSize = CGSizeMake( self.contentTableView.frame.size.width, self.headerScrollView.frame.size.height);
|
|
|
|
|
+ self.contentTableView.frame = CGRectMake(0, 0, contentWidth + [self numberOfColumns] * [self columnMargin] , height - topheaderHeight);
|
|
|
|
|
+ self.contentScrollView.frame = CGRectMake(leftHeaderWidth, topheaderHeight, width - leftHeaderWidth, height - topheaderHeight);
|
|
|
|
|
+ self.contentScrollView.contentSize = self.contentTableView.frame.size;
|
|
|
|
|
+ self.leftHeader.frame = CGRectMake(0, 0, [self leftHeaderWidth], [self topHeaderHeight]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void)loadUI
|
|
- (void)loadUI
|
|
|
{
|
|
{
|
|
|
- [self loadHeaderScrollView];
|
|
|
|
|
- [self loadContentScrollView];
|
|
|
|
|
- [self loadLeftView];
|
|
|
|
|
|
|
+ [self loadHeaderScrollView];
|
|
|
|
|
+ [self loadContentScrollView];
|
|
|
|
|
+ [self loadLeftView];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)reloadData
|
|
- (void)reloadData
|
|
|
{
|
|
{
|
|
|
- [self loadLeftViewData];
|
|
|
|
|
- [self loadContentData];
|
|
|
|
|
- [self loadHeaderData];
|
|
|
|
|
|
|
+ [self loadLeftViewData];
|
|
|
|
|
+ [self loadContentData];
|
|
|
|
|
+ [self loadHeaderData];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - UI
|
|
#pragma mark - UI
|
|
|
|
|
|
|
|
- (void)loadHeaderScrollView
|
|
- (void)loadHeaderScrollView
|
|
|
{
|
|
{
|
|
|
- UIScrollView *headerScrollView = [[UIScrollView alloc] init];
|
|
|
|
|
- headerScrollView.delegate = self;
|
|
|
|
|
- self.headerScrollView = headerScrollView;
|
|
|
|
|
- self.headerScrollView.backgroundColor = [UIColor colorWithWhite:0.803 alpha:0.850];
|
|
|
|
|
-
|
|
|
|
|
- [self addSubview:headerScrollView];
|
|
|
|
|
|
|
+ UIScrollView *headerScrollView = [[UIScrollView alloc] init];
|
|
|
|
|
+ headerScrollView.delegate = self;
|
|
|
|
|
+ self.headerScrollView = headerScrollView;
|
|
|
|
|
+ self.headerScrollView.backgroundColor = [UIColor colorWithWhite:0.803 alpha:0.850];
|
|
|
|
|
+
|
|
|
|
|
+ [self addSubview:headerScrollView];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)loadContentScrollView
|
|
- (void)loadContentScrollView
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
- UIScrollView *scrollView = [[UIScrollView alloc] init];
|
|
|
|
|
- scrollView.bounces = NO;
|
|
|
|
|
- scrollView.delegate = self;
|
|
|
|
|
-
|
|
|
|
|
- UITableView *tableView = [[UITableView alloc] init];
|
|
|
|
|
- tableView.delegate = self;
|
|
|
|
|
- tableView.dataSource = self;
|
|
|
|
|
- tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
|
|
|
|
-
|
|
|
|
|
- [self addSubview:scrollView];
|
|
|
|
|
- [scrollView addSubview:tableView];
|
|
|
|
|
-
|
|
|
|
|
- self.contentScrollView = scrollView;
|
|
|
|
|
- self.contentTableView = tableView;
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ UIScrollView *scrollView = [[UIScrollView alloc] init];
|
|
|
|
|
+ scrollView.bounces = NO;
|
|
|
|
|
+ scrollView.delegate = self;
|
|
|
|
|
+
|
|
|
|
|
+ UITableView *tableView = [[UITableView alloc] init];
|
|
|
|
|
+ tableView.delegate = self;
|
|
|
|
|
+ tableView.dataSource = self;
|
|
|
|
|
+ tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
|
|
|
|
+
|
|
|
|
|
+ [self addSubview:scrollView];
|
|
|
|
|
+ [scrollView addSubview:tableView];
|
|
|
|
|
+
|
|
|
|
|
+ self.contentScrollView = scrollView;
|
|
|
|
|
+ self.contentTableView = tableView;
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)loadLeftView
|
|
- (void)loadLeftView
|
|
|
{
|
|
{
|
|
|
- UITableView *leftTableView = [[UITableView alloc] init];
|
|
|
|
|
- leftTableView.delegate = self;
|
|
|
|
|
- leftTableView.dataSource = self;
|
|
|
|
|
- leftTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
|
|
|
|
- self.leftTableView = leftTableView;
|
|
|
|
|
- [self addSubview:leftTableView];
|
|
|
|
|
-
|
|
|
|
|
- UIView *leftHeader = [[UIView alloc] init];
|
|
|
|
|
- leftHeader.backgroundColor = [UIColor colorWithWhite:0.950 alpha:0.668];
|
|
|
|
|
- self.leftHeader = leftHeader;
|
|
|
|
|
- [self addSubview:leftHeader];
|
|
|
|
|
-
|
|
|
|
|
|
|
+ UITableView *leftTableView = [[UITableView alloc] init];
|
|
|
|
|
+ leftTableView.delegate = self;
|
|
|
|
|
+ leftTableView.dataSource = self;
|
|
|
|
|
+ leftTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
|
|
|
|
+ self.leftTableView = leftTableView;
|
|
|
|
|
+ [self addSubview:leftTableView];
|
|
|
|
|
+
|
|
|
|
|
+ UIView *leftHeader = [[UIView alloc] init];
|
|
|
|
|
+ leftHeader.backgroundColor = [UIColor colorWithWhite:0.950 alpha:0.668];
|
|
|
|
|
+ self.leftHeader = leftHeader;
|
|
|
|
|
+ [self addSubview:leftHeader];
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -135,132 +135,131 @@ static const CGFloat kColumnMargin = 1;
|
|
|
|
|
|
|
|
- (void)loadHeaderData
|
|
- (void)loadHeaderData
|
|
|
{
|
|
{
|
|
|
- NSArray *subviews = self.headerScrollView.subviews;
|
|
|
|
|
-
|
|
|
|
|
- for (UIView *subview in subviews) {
|
|
|
|
|
- [subview removeFromSuperview];
|
|
|
|
|
- }
|
|
|
|
|
- CGFloat x = 0.0;
|
|
|
|
|
- CGFloat w = 0.0;
|
|
|
|
|
- for (int i = 0; i < [self numberOfColumns] ; i++) {
|
|
|
|
|
- w = [self contentWidthForColumn:i] + [self columnMargin];
|
|
|
|
|
-
|
|
|
|
|
- FLEXTableColumnHeader *cell = [[FLEXTableColumnHeader alloc] initWithFrame:CGRectMake(x, 0, w, [self topHeaderHeight] - 1)];
|
|
|
|
|
- cell.label.text = [self columnTitleForColumn:i];
|
|
|
|
|
- [self.headerScrollView addSubview:cell];
|
|
|
|
|
-
|
|
|
|
|
- FLEXTableColumnHeaderSortType type = [self.sortStatusDict[[self columnTitleForColumn:i]] integerValue];
|
|
|
|
|
- [cell changeSortStatusWithType:type];
|
|
|
|
|
-
|
|
|
|
|
- UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self
|
|
|
|
|
- action:@selector(contentHeaderTap:)];
|
|
|
|
|
- [cell addGestureRecognizer:gesture];
|
|
|
|
|
- cell.userInteractionEnabled = YES;
|
|
|
|
|
|
|
+ NSArray *subviews = self.headerScrollView.subviews;
|
|
|
|
|
|
|
|
- x = x + w;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ for (UIView *subview in subviews) {
|
|
|
|
|
+ [subview removeFromSuperview];
|
|
|
|
|
+ }
|
|
|
|
|
+ CGFloat x = 0.0;
|
|
|
|
|
+ CGFloat w = 0.0;
|
|
|
|
|
+ for (int i = 0; i < [self numberOfColumns] ; i++) {
|
|
|
|
|
+ w = [self contentWidthForColumn:i] + [self columnMargin];
|
|
|
|
|
+
|
|
|
|
|
+ FLEXTableColumnHeader *cell = [[FLEXTableColumnHeader alloc] initWithFrame:CGRectMake(x, 0, w, [self topHeaderHeight] - 1)];
|
|
|
|
|
+ cell.label.text = [self columnTitleForColumn:i];
|
|
|
|
|
+ [self.headerScrollView addSubview:cell];
|
|
|
|
|
+
|
|
|
|
|
+ FLEXTableColumnHeaderSortType type = [self.sortStatusDict[[self columnTitleForColumn:i]] integerValue];
|
|
|
|
|
+ [cell changeSortStatusWithType:type];
|
|
|
|
|
+
|
|
|
|
|
+ UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self
|
|
|
|
|
+ action:@selector(contentHeaderTap:)];
|
|
|
|
|
+ [cell addGestureRecognizer:gesture];
|
|
|
|
|
+ cell.userInteractionEnabled = YES;
|
|
|
|
|
+
|
|
|
|
|
+ x = x + w;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)contentHeaderTap:(UIGestureRecognizer *)gesture
|
|
- (void)contentHeaderTap:(UIGestureRecognizer *)gesture
|
|
|
{
|
|
{
|
|
|
- FLEXTableColumnHeader *header = (FLEXTableColumnHeader *)gesture.view;
|
|
|
|
|
- NSString *string = header.label.text;
|
|
|
|
|
- FLEXTableColumnHeaderSortType currentType = [self.sortStatusDict[string] integerValue];
|
|
|
|
|
- FLEXTableColumnHeaderSortType newType ;
|
|
|
|
|
-
|
|
|
|
|
- switch (currentType) {
|
|
|
|
|
- case FLEXTableColumnHeaderSortTypeNone:
|
|
|
|
|
- newType = FLEXTableColumnHeaderSortTypeAsc;
|
|
|
|
|
- break;
|
|
|
|
|
- case FLEXTableColumnHeaderSortTypeAsc:
|
|
|
|
|
- newType = FLEXTableColumnHeaderSortTypeDesc;
|
|
|
|
|
- break;
|
|
|
|
|
- case FLEXTableColumnHeaderSortTypeDesc:
|
|
|
|
|
- newType = FLEXTableColumnHeaderSortTypeAsc;
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- self.sortStatusDict = @{header.label.text : @(newType)};
|
|
|
|
|
- [header changeSortStatusWithType:newType];
|
|
|
|
|
- [self.delegate multiColumnTableView:self headerTapWithText:string sortType:newType];
|
|
|
|
|
-
|
|
|
|
|
|
|
+ FLEXTableColumnHeader *header = (FLEXTableColumnHeader *)gesture.view;
|
|
|
|
|
+ NSString *string = header.label.text;
|
|
|
|
|
+ FLEXTableColumnHeaderSortType currentType = [self.sortStatusDict[string] integerValue];
|
|
|
|
|
+ FLEXTableColumnHeaderSortType newType ;
|
|
|
|
|
+
|
|
|
|
|
+ switch (currentType) {
|
|
|
|
|
+ case FLEXTableColumnHeaderSortTypeNone:
|
|
|
|
|
+ newType = FLEXTableColumnHeaderSortTypeAsc;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case FLEXTableColumnHeaderSortTypeAsc:
|
|
|
|
|
+ newType = FLEXTableColumnHeaderSortTypeDesc;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case FLEXTableColumnHeaderSortTypeDesc:
|
|
|
|
|
+ newType = FLEXTableColumnHeaderSortTypeAsc;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ self.sortStatusDict = @{header.label.text : @(newType)};
|
|
|
|
|
+ [header changeSortStatusWithType:newType];
|
|
|
|
|
+ [self.delegate multiColumnTableView:self didTapHeaderWithText:string sortType:newType];
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- (void)loadContentData
|
|
- (void)loadContentData
|
|
|
{
|
|
{
|
|
|
- [self.contentTableView reloadData];
|
|
|
|
|
|
|
+ [self.contentTableView reloadData];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)loadLeftViewData
|
|
- (void)loadLeftViewData
|
|
|
{
|
|
{
|
|
|
- [self.leftTableView reloadData];
|
|
|
|
|
|
|
+ [self.leftTableView reloadData];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView
|
|
|
cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
|
{
|
|
{
|
|
|
- UIColor *backgroundColor = [UIColor whiteColor];
|
|
|
|
|
- if (indexPath.row % 2 != 0) {
|
|
|
|
|
- backgroundColor = [UIColor colorWithWhite:0.950 alpha:0.750];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (tableView != self.leftTableView) {
|
|
|
|
|
- self.rowData = [self.dataSource contentAtRow:indexPath.row];
|
|
|
|
|
- FLEXTableContentCell *cell = [FLEXTableContentCell cellWithTableView:tableView
|
|
|
|
|
- columnNumber:[self numberOfColumns]];
|
|
|
|
|
- cell.contentView.backgroundColor = backgroundColor;
|
|
|
|
|
- cell.delegate = self;
|
|
|
|
|
|
|
+ UIColor *backgroundColor = [UIColor whiteColor];
|
|
|
|
|
+ if (indexPath.row % 2 != 0) {
|
|
|
|
|
+ backgroundColor = [UIColor colorWithWhite:0.950 alpha:0.750];
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- for (int i = 0 ; i < cell.labels.count; i++) {
|
|
|
|
|
-
|
|
|
|
|
- UILabel *label = cell.labels[i];
|
|
|
|
|
- label.textColor = [UIColor blackColor];
|
|
|
|
|
-
|
|
|
|
|
- NSString *content = [NSString stringWithFormat:@"%@",self.rowData[i]];
|
|
|
|
|
- if ([content isEqualToString:@"<null>"]) {
|
|
|
|
|
- label.textColor = [UIColor lightGrayColor];
|
|
|
|
|
- content = @"NULL";
|
|
|
|
|
- }
|
|
|
|
|
- label.text = content;
|
|
|
|
|
- label.backgroundColor = backgroundColor;
|
|
|
|
|
|
|
+ if (tableView != self.leftTableView) {
|
|
|
|
|
+ self.rowData = [self.dataSource contentAtRow:indexPath.row];
|
|
|
|
|
+ FLEXTableContentCell *cell = [FLEXTableContentCell cellWithTableView:tableView
|
|
|
|
|
+ columnNumber:[self numberOfColumns]];
|
|
|
|
|
+ cell.contentView.backgroundColor = backgroundColor;
|
|
|
|
|
+ cell.delegate = self;
|
|
|
|
|
+
|
|
|
|
|
+ for (int i = 0 ; i < cell.labels.count; i++) {
|
|
|
|
|
+
|
|
|
|
|
+ UILabel *label = cell.labels[i];
|
|
|
|
|
+ label.textColor = [UIColor blackColor];
|
|
|
|
|
+
|
|
|
|
|
+ NSString *content = [NSString stringWithFormat:@"%@",self.rowData[i]];
|
|
|
|
|
+ if ([content isEqualToString:@"<null>"]) {
|
|
|
|
|
+ label.textColor = [UIColor lightGrayColor];
|
|
|
|
|
+ content = @"NULL";
|
|
|
|
|
+ }
|
|
|
|
|
+ label.text = content;
|
|
|
|
|
+ label.backgroundColor = backgroundColor;
|
|
|
|
|
+ }
|
|
|
|
|
+ return cell;
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ FLEXTableLeftCell *cell = [FLEXTableLeftCell cellWithTableView:tableView];
|
|
|
|
|
+ cell.contentView.backgroundColor = backgroundColor;
|
|
|
|
|
+ cell.titlelabel.text = [self rowTitleForRow:indexPath.row];
|
|
|
|
|
+ return cell;
|
|
|
}
|
|
}
|
|
|
- return cell;
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- FLEXTableLeftCell *cell = [FLEXTableLeftCell cellWithTableView:tableView];
|
|
|
|
|
- cell.contentView.backgroundColor = backgroundColor;
|
|
|
|
|
- cell.titlelabel.text = [self rowTitleForRow:indexPath.row];
|
|
|
|
|
- return cell;
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource numberOfRowsInTableView:self];
|
|
|
|
|
|
|
+ return [self.dataSource numberOfRowsInTableView:self];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource multiColumnTableView:self heightForContentCellInRow:indexPath.row];
|
|
|
|
|
|
|
+ return [self.dataSource multiColumnTableView:self heightForContentCellInRow:indexPath.row];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
|
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
|
|
{
|
|
{
|
|
|
- if (scrollView == self.contentScrollView) {
|
|
|
|
|
- self.headerScrollView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
- }
|
|
|
|
|
- else if (scrollView == self.headerScrollView) {
|
|
|
|
|
- self.contentScrollView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
- }
|
|
|
|
|
- else if (scrollView == self.leftTableView) {
|
|
|
|
|
- self.contentTableView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
- }
|
|
|
|
|
- else if (scrollView == self.contentTableView) {
|
|
|
|
|
- self.leftTableView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (scrollView == self.contentScrollView) {
|
|
|
|
|
+ self.headerScrollView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (scrollView == self.headerScrollView) {
|
|
|
|
|
+ self.contentScrollView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (scrollView == self.leftTableView) {
|
|
|
|
|
+ self.contentTableView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (scrollView == self.contentTableView) {
|
|
|
|
|
+ self.leftTableView.contentOffset = scrollView.contentOffset;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#pragma mark -
|
|
#pragma mark -
|
|
@@ -268,16 +267,16 @@ static const CGFloat kColumnMargin = 1;
|
|
|
|
|
|
|
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
|
|
{
|
|
{
|
|
|
- if (tableView == self.leftTableView) {
|
|
|
|
|
- [self.contentTableView selectRowAtIndexPath:indexPath
|
|
|
|
|
- animated:NO
|
|
|
|
|
- scrollPosition:UITableViewScrollPositionNone];
|
|
|
|
|
- }
|
|
|
|
|
- else if (tableView == self.contentTableView) {
|
|
|
|
|
- [self.leftTableView selectRowAtIndexPath:indexPath
|
|
|
|
|
- animated:NO
|
|
|
|
|
- scrollPosition:UITableViewScrollPositionNone];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (tableView == self.leftTableView) {
|
|
|
|
|
+ [self.contentTableView selectRowAtIndexPath:indexPath
|
|
|
|
|
+ animated:NO
|
|
|
|
|
+ scrollPosition:UITableViewScrollPositionNone];
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (tableView == self.contentTableView) {
|
|
|
|
|
+ [self.leftTableView selectRowAtIndexPath:indexPath
|
|
|
|
|
+ animated:NO
|
|
|
|
|
+ scrollPosition:UITableViewScrollPositionNone];
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#pragma mark -
|
|
#pragma mark -
|
|
@@ -285,61 +284,58 @@ static const CGFloat kColumnMargin = 1;
|
|
|
|
|
|
|
|
- (NSInteger)numberOfrows
|
|
- (NSInteger)numberOfrows
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource numberOfRowsInTableView:self];
|
|
|
|
|
|
|
+ return [self.dataSource numberOfRowsInTableView:self];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (NSInteger)numberOfColumns
|
|
- (NSInteger)numberOfColumns
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource numberOfColumnsInTableView:self];
|
|
|
|
|
|
|
+ return [self.dataSource numberOfColumnsInTableView:self];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (NSString *)columnTitleForColumn:(NSInteger)column
|
|
- (NSString *)columnTitleForColumn:(NSInteger)column
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource columnNameInColumn:column];
|
|
|
|
|
|
|
+ return [self.dataSource columnNameInColumn:column];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (NSString *)rowTitleForRow:(NSInteger)row
|
|
- (NSString *)rowTitleForRow:(NSInteger)row
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource rowNameInRow:row];
|
|
|
|
|
|
|
+ return [self.dataSource rowNameInRow:row];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (NSString *)contentAtColumn:(NSInteger)column row:(NSInteger)row;
|
|
- (NSString *)contentAtColumn:(NSInteger)column row:(NSInteger)row;
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource contentAtColumn:column row:row];
|
|
|
|
|
|
|
+ return [self.dataSource contentAtColumn:column row:row];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (CGFloat)contentWidthForColumn:(NSInteger)column
|
|
- (CGFloat)contentWidthForColumn:(NSInteger)column
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource multiColumnTableView:self widthForContentCellInColumn:column];
|
|
|
|
|
|
|
+ return [self.dataSource multiColumnTableView:self widthForContentCellInColumn:column];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (CGFloat)contentHeightForRow:(NSInteger)row
|
|
- (CGFloat)contentHeightForRow:(NSInteger)row
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource multiColumnTableView:self heightForContentCellInRow:row];
|
|
|
|
|
|
|
+ return [self.dataSource multiColumnTableView:self heightForContentCellInRow:row];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (CGFloat)topHeaderHeight
|
|
- (CGFloat)topHeaderHeight
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource heightForTopHeaderInTableView:self];
|
|
|
|
|
|
|
+ return [self.dataSource heightForTopHeaderInTableView:self];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (CGFloat)leftHeaderWidth
|
|
- (CGFloat)leftHeaderWidth
|
|
|
{
|
|
{
|
|
|
- return [self.dataSource WidthForLeftHeaderInTableView:self];
|
|
|
|
|
|
|
+ return [self.dataSource widthForLeftHeaderInTableView:self];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (CGFloat)columnMargin
|
|
- (CGFloat)columnMargin
|
|
|
{
|
|
{
|
|
|
- return kColumnMargin;
|
|
|
|
|
|
|
+ return kColumnMargin;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- (void)tableContentCell:(FLEXTableContentCell *)tableView labelDidTapWithText:(NSString *)text
|
|
- (void)tableContentCell:(FLEXTableContentCell *)tableView labelDidTapWithText:(NSString *)text
|
|
|
{
|
|
{
|
|
|
- if ([self.delegate respondsToSelector:@selector(multiColumnTableView:labelDidTapWithText:)]) {
|
|
|
|
|
- [self.delegate multiColumnTableView:self labelDidTapWithText:text];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ [self.delegate multiColumnTableView:self didTapLabelWithText:text];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@end
|
|
@end
|