标题选择 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 中的多个部分的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UI 测试 - UITableView 部分

uitableview 中的多个原型单元,带有部分

UITableView 和 UIButtons 中的多个部分 swift

从多节 UITableView 中的自定义静态单元格中检索标签文本

UITableView 具有多个具有多行的部分。我需要部分独立运行

从多个部分 UITableView 中的 UITableViewCell 获取 IndexPath 以响应通知