标题选择 UITableview 中的多个部分
Posted
技术标签:
【中文标题】标题选择 UITableview 中的多个部分【英文标题】:Multiple section from header selection UITableview 【发布时间】:2020-06-23 17:19:42 【问题描述】:我正在尝试使用带有 tableview 的 treeview 来选择多个项目 你知道有什么其他的方式来做树视图吗?
我正在尝试向使用不同提供商的相机的用户授予权限
如何从标题部分的 UIButton 中选择所有子项
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
CGRect frame = tableView.frame;
UIButton *selectButton = [[UIButton alloc] initWithFrame:CGRectMake(0, -5, 40, 40)];
[selectButton setImage:[UIImage imageNamed:@"ic_combobox_off"] forState:UIControlStateNormal];
[selectButton addTarget:self action:@selector(headerSelected:) forControlEvents:UIControlEventTouchUpInside];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(40, 0, 200, 30)];
title.text = [_dataProviders objectAtIndex:section];
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
[headerView addSubview:selectButton];
[headerView addSubview:title];
[headerView setBackgroundColor:UIColor.lightGrayColor];
return headerView;
- (void) headerSelected:(NSInteger) section
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
VideoPermissionsServiceTableViewCell *cell = (VideoPermissionsServiceTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CELL_VIDEO_PERMITION forIndexPath:indexPath];
NSString *sectionTitle = [_dataProviders objectAtIndex:indexPath.section];
NSArray *sectionDevice = [_dataInput objectForKey:sectionTitle];
NSString *device = [sectionDevice objectAtIndex:indexPath.row];
cell.deviceLabel.text = device;
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
return cell;
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section
NSString *providers = [_dataProviders objectAtIndex:section];
NSArray *devices= [_dataInput objectForKey:providers];
return [devices count];
【问题讨论】:
【参考方案1】:首先,您的代码中存在很多问题:
-
将 UITableViewHeaderFooterView 用于页眉和页脚视图。这样可以节省内存。有很多例子和教程;
在 cellForRowAtIndexPath() 中,dequeueReusableCellWithIdentifier() 之后的单元格可以为零,除非您在视图控制器加载时间的某处注册单元格 nib;
headerSelected() 采用事件发送者的输入参数,而不是节号。在您的情况下,它将是您的 UIButton。在这种方法中,您应该从按钮本身中找到节号。好主意是在填充标题视图期间将部分设置为按钮。尝试使用标签属性;
在简单的情况下,有了节号,您可以遍历该节中的单元格,通过 cellForRowAtIndexPath() 获取单元格,访问其按钮,并将其设置为新状态。
请注意,您只能获取可见单元格。为了使它适用于那些向下滚动的人,您需要他们在 cellForRowAtIndexPath() 中填充单元格期间根据部分按钮状态设置按钮状态。
【讨论】:
以上是关于标题选择 UITableview 中的多个部分的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 和 UIButtons 中的多个部分 swift
从多节 UITableView 中的自定义静态单元格中检索标签文本