如何实现两列 tableview 的联动效果
发布网友
发布时间:2022-07-16 12:31
我来回答
共1个回答
热心网友
时间:2024-06-25 02:25
直接上代码
@implementation ViewController
{
UITableView *_rightTableView;
UITableView *_leftTableView;
NSArray *_leftTableSource;
NSArray *_rightTableSource;
}
初始化数据源
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_leftTableSource = @[@"11",@"22",@"33",@"44",@"55",@"66"];
_rightTableSource =@[@{@"header":@"11",@"title":@[@"aa",@"bb",@"cc",@"dd",@"ee",@"ff"]},
@{@"header":@"22",@"title":@[@"gg",@"mm",@"nn",@"oo",@"pp",@"qq"]},
@{@"header":@"33",@"title":@[@"rr",@"ss",@"jj",@"xx",@"yy",@"zz"]},
@{@"header":@"44",@"title":@[@"aa",@"bb",@"cc",@"dd",@"ee",@"ff"]},
@{@"header":@"55",@"title":@[@"gg",@"mm",@"nn",@"oo",@"pp",@"qq"]},
@{@"header":@"66",@"title":@[@"rr",@"ss",@"jj",@"xx",@"yy",@"zz"]}];
[self setupSomeParamars];
}
创建两个tableview
- (void)setupSomeParamars
{
_rightTableView = [[UITableView alloc] initWithFrame:CGRectMake(100, 0,self.view.frame.size.width - 100, self.view.frame.size.height)style:UITableViewStyleGrouped];
_rightTableView.dataSource = self;
_rightTableView.delegate = self;
[self.view addSubview:_rightTableView];
_leftTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100,self.view.frame.size.height) style:UITableViewStyleGrouped];
_leftTableView.dataSource = self;
_leftTableView.delegate = self;
[self.view addSubview:_leftTableView];
}
设置cell的显示
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *reuseIdentifer = @"cell";
UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:reuseIdentifer];
if(!cell){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:reuseIdentifer];
}
if(tableView == _rightTableView){
cell.textLabel.text = [_rightTableSource[indexPath.section]objectForKey:@"title"][indexPath.row];
}else if (tableView == _leftTableView){
cell.textLabel.text = _leftTableSource[indexPath.row];
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (tableView == _rightTableView) {
return 50;
}else{
return 50;
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (tableView == _rightTableView) {
return _rightTableSource.count;
}else{
return 1;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == _leftTableView) {
return _leftTableSource.count;
}else{
return [[_rightTableSource[section] objectForKey:@"title"] count];
}
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if (tableView == _rightTableView) {
return [_rightTableSource[section] objectForKey:@"header"];
}else{
return nil;
}
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if(tableView == _rightTableView){
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width-100, 40)];
label.backgroundColor = [UIColor cyanColor];
label.text = [_rightTableSource[section] objectForKey:@"header"];
label.textColor = [UIColor redColor];
return label;
}else{
return nil;
}
}
联动效果在于这里
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
if(tableView == _rightTableView){
[_leftTableView selectRowAtIndexPath:[NSIndexPath indexPathForItem:sectioninSection:0] animated:YES scrollPosition:UITableViewScrollPositionNone];
}
}