来自 header 个选择的 UITableview 的多个部分
Multiple section from header selection UITableview
我正在尝试像使用 tableview 的 treeview 那样处理 select 多个项目
你知道做树视图的其他方法吗?
我正在尝试向不同提供商的相机用户授予权限
我如何 select 来自 header 部分
上的 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];
}
首先,您的代码中存在很多问题:
- 将 UITableViewHeaderFooterView 用于 header 和页脚视图。这样可以节省内存。有很多例子和教程;
- 在 cellForRowAtIndexPath() 中,你的 cell 在 dequeueReusableCellWithIdentifier() 之后可以是 nil,除非你在视图控制器加载时间的某个地方注册了 cell nib;
- headerSelected() 采用事件发送者的输入参数,而不是节号。在您的情况下,它将是您的 UIButton。在此方法中,您应该从按钮本身找到部分编号。好主意是在 header 视图填充期间将部分设置为按钮。尝试使用标签 属性;
- 在最简单的情况下,有节号,您可以遍历该节中的单元格,通过 cellForRowAtIndexPath() 获取单元格,访问其按钮,并将其设置为新状态。
请注意,您只能获取可见单元格。为了使其适用于那些向下滚动的人,您需要他们在 cellForRowAtIndexPath() 中填充单元格期间根据部分按钮状态设置按钮状态。
我正在尝试像使用 tableview 的 treeview 那样处理 select 多个项目 你知道做树视图的其他方法吗?
我正在尝试向不同提供商的相机用户授予权限
我如何 select 来自 header 部分
上的 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];
}
首先,您的代码中存在很多问题:
- 将 UITableViewHeaderFooterView 用于 header 和页脚视图。这样可以节省内存。有很多例子和教程;
- 在 cellForRowAtIndexPath() 中,你的 cell 在 dequeueReusableCellWithIdentifier() 之后可以是 nil,除非你在视图控制器加载时间的某个地方注册了 cell nib;
- headerSelected() 采用事件发送者的输入参数,而不是节号。在您的情况下,它将是您的 UIButton。在此方法中,您应该从按钮本身找到部分编号。好主意是在 header 视图填充期间将部分设置为按钮。尝试使用标签 属性;
- 在最简单的情况下,有节号,您可以遍历该节中的单元格,通过 cellForRowAtIndexPath() 获取单元格,访问其按钮,并将其设置为新状态。
请注意,您只能获取可见单元格。为了使其适用于那些向下滚动的人,您需要他们在 cellForRowAtIndexPath() 中填充单元格期间根据部分按钮状态设置按钮状态。