如何在表格视图单元格上应用复选标记

Posted

技术标签:

【中文标题】如何在表格视图单元格上应用复选标记【英文标题】:How to apply check marks on a table view cell 【发布时间】:2013-03-10 20:05:17 【问题描述】:

我正在开发一个 ios 应用程序,使用 Xcode 4.6 在 Objective-C 中进行编码。我想知道如何在选定的表格视图单元格上打上复选标记,然后访问已标记的那些单元格以重用它们,例如将它们保存在数组中。这是我的表格视图类代码,因此您可以看到:

#import "TablaMateriasViewController2.h"

@interface TablaMateriasViewController2 ()

@end

@implementation TablaMateriasViewController2
@synthesize materias,materiasKeys;
NSMutableArray *Materias;

- (id)initWithStyle:(UITableViewStyle)style

    self = [super initWithStyle:style];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

[super viewDidLoad];

Materias = [[NSMutableArray alloc]init ];

Materia  *mat  = [[Materia alloc]init];
[mat setNombre:@"Matematicas I"];
[mat setCodigo:@"FBTMI01"];
[mat setGradoDificultad:3];
[mat setDescripcion:@"..."];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Matematicas II"];
[mat setCodigo:@"FBTMI02"];
[mat setGradoDificultad:4];
[mat setDescripcion:@"......"];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Fisica I"];
[mat setCodigo:@"FBTFI01"];
[mat setGradoDificultad:2];
[mat setDescripcion:@".."];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Fisica II"];
[mat setCodigo:@"FBTFI02"];
[mat setGradoDificultad:4];
[mat setDescripcion:@"!!!!"];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Fiscia III"];
[mat setCodigo:@"FBTFI03"];
[mat setGradoDificultad:5];
[mat setDescripcion:@"---"];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Estructura de Datos"];
[mat setCodigo:@"BPTPR12"];
[mat setGradoDificultad:4];
[mat setDescripcion:@"Orientacion a objetos"];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Algoritmos y Programacion"];
[mat setCodigo:@"BPTPR11"];
[mat setGradoDificultad:3];
[mat setDescripcion:@"estructurada"];
[Materias addObject:mat];

mat  = [[Materia alloc]init];
[mat setNombre:@"Matematicas III"];
[mat setCodigo:@"FBTMI03"];
[mat setGradoDificultad:3];
[mat setDescripcion:@"Mate 3"];
[Materias addObject:mat];    


- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];


#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

return Materias.count;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath      *)indexPath

static NSString *CellIdentifier = @"MateriaCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

Materia *current = [Materias objectAtIndex:indexPath.row];
[cell.textLabel setText:current.Nombre];

return cell;



#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath



@end

【问题讨论】:

见***.com/questions/3040894/… Displaying checkmark on cells iOS 5的可能重复 【参考方案1】:

如果您想跟踪多个复选标记,最简单的方法是向您的 Materia 对象添加一个 BOOL 属性,例如 isChecked 之类的。在 cellForRowAtIndexPath 方法中,您将检查 BOOL 的状态,如果是,则添加复选标记,如果不是,则不添加复选标记。您不应该将单元格保存在数组中,您的数据源数组 Materias 将记录选择了哪些单元格,您可以将其用于任何您想要的目的。您将在 didSelectRowAtIndexPath 方法中更新该 BOOL 的值。

【讨论】:

好的,谢谢,听起来不错。但是如何将复选标记放在屏幕上的表格视图单元格中?有什么特别的项目吗? 如果您使用的是标准 UITableViewCell 类型之一,请设置“accessoryType”属性 -- cell.accessoryType = UITableViewCellAccessoryCheckmark; -- 并清除它: cell.accessoryType = UITableViewCellAccessoryNone; @CharliePrice 谢谢。我还有最后一个疑问。当我运行应用程序时,我想触摸要打勾的表格视图单元格,然后使勾号出现。我怎样才能做到这一点?我是否必须在要打勾的每个表格单元格中放置一个操作按钮? 好的,非常感谢你们俩!我的问题解决了。 @CharliePrice @rdelmar 好的,非常感谢你们!我的问题解决了。

以上是关于如何在表格视图单元格上应用复选标记的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中保存 UITableViewCell 附件复选标记的状态

如何在单元格渲染后检查表格视图上的复选标记图标(附件视图)?

多个复选标记附件在 iOS7 中无法正常工作

设置静态表格视图单元格的复选标记

iOS - 如何查看表格视图单元格上的“滑动删除”操作?

自定义表格视图单元格上的多个图像(Swift)