gpt4 book ai didi

ios - 如何存储、检索选中或未选中的单元格

转载 作者:行者123 更新时间:2023-11-29 03:00:43 26 4
gpt4 key购买 nike

我正在尝试保存我在单元格上放置的复选标记,然后检索它。我在那个部分有 11 个单元格。

我试着用这个 link作为指南并且它有效。但我只想保存一个复选标记,而不是很多。

我还想默认为所有单元格设置复选标记。我将如何实现这一目标

我的代码:

- (NSString *)getKeyForIndex:(int)index{
return [NSString stringWithFormat:@"KEY%d",index];
}

- (BOOL) getCheckedForIndex:(int)index {
if([[[NSUserDefaults standardUserDefaults] valueForKey:[self getKeyForIndex:index]] boolValue]==YES) {
return YES;
}
else
{
return NO;
}
}

- (void) checkedCellAtIndex:(int)index
{
BOOL boolChecked = [self getCheckedForIndex:index];

[[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:!boolChecked] forKey:[self getKeyForIndex:index]];
[[NSUserDefaults standardUserDefaults] synchronize];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

if(section == 4) {
if([self getCheckedForIndex:indexPath.row]==YES) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
}


return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell = nil;

NSString *key = [_keys objectAtIndex:indexPath.section];
NSArray *name = [_names objectForKey:key];

static NSString *MyCellIdentifier = @"Cell";

cell = [tableView dequeueReusableCellWithIdentifier:nil];

if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyCellIdentifier];

cell.textLabel.text = [name objectAtIndex:indexPath.row];
if(section == 4) {
[self checkedCellAtIndex:indexPath.row];

if([self getCheckedForIndex:indexPath.row]==YES)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}

[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

最佳答案

解决方案可能很棘手:

维护一个与tableview数据源数组相同的数组。

比如说你有 NSMutableArray *mutArrNames 哪个 tableview 数据源。现在 NSMutableArray *mutArrNamesCheckList显示哪个被检查或没有检查;

最初 nothingselected 所以 添加 0 取消选中一个:

for(int i =0; i<[mutArrNames count];i++)
{
[mutArrNamesCheckList addObject:@"0"];
}

现在像这样使用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

if(section == 4) {
//check from mutArrNamesCheckList's list if cell is check one or not
if([[mutArrNamesCheckList objectAtIndex:indexPath.row] intValue] == 1) //checked one
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else //unchecked one
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
}
return cell;
}

这里可以根据你的需求来使用,比如允许多选或者单选

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//get cell object
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

if(section == 4)
{
if([[mutArrNamesCheckList objectAtIndex:indexPath.row] intValue] == 1) //checked one
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
//replace 0 with 1 as check one
[mutArrNamesCheckList replaceObjectAtIndex:indexPath.row withObject:@"0"];
}
else //unchecked one
{
cell.accessoryType = UITableViewCellAccessoryNone;
//replace 1 with 0 as uncheck one
[mutArrNamesCheckList replaceObjectAtIndex:indexPath.row withObject:@"1"];
}
}
}

对于所有单元格选择取消选择,将其添加到按钮的操作方法中。使用这个:

//remove all as new objects will be added
[mutArrNamesCheckList removeAllObjects];
if(!btnCheckAll.selected)//selected property used - default is no so all not selected
{
//make all selected
for(int i =0; i<[mutArrNames count];i++)
{
[mutArrNamesCheckList addObject:@"1"];
}
//change buttons image here
}
else
{
//make all unselected
for(int i =0; i<[mutArrNames count];i++)
{
[mutArrNamesCheckList addObject:@"0"];
}
//change buttons image here
}

//tableView reload
[yourtableView reloadData];

btnCheckAll.selected = !btnCheckAll.selected;

AppDelegate 中添加 mutArrNamesCheckList 以在 whole Applicationvisible

因此,我们在我们的 View Controller 中的上述答案的顶部上完成了删除迭代,因为我们想要使用 gobally

编辑:在didSelectRowAtIndexPath中添加切换+单击全选按钮,所有单元格都被选中,否则未选中

关于ios - 如何存储、检索选中或未选中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23334105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com