当用户多次加载视图时,在 uitableview 上保存附件复选标记

2024-01-27

因此,我实现了一个带有 tableview 的 UIViewController,基本上它作为我的 uicollectionview 的一组“过滤器”加载。

现在,当我单击表格视图中的复选标记时,它会相应地“过滤”我的单元格,但现在当我再次重新加载视图时,我想显示我最近使用过的“复选标记”或“过滤器”。

我已经看到这是用 NSUserDefaults 实现的,但我无法成功实现它。

如果有人可以帮助我,我将不胜感激。

CODE

FiltersViewController.m:

#import "FiltersViewController.h"

@interface FiltersViewController ()

@property (nonatomic, strong) NSMutableSet *selectedRowObjects;
//@property (nonatomic, strong) NSArray *filters;

@end

@implementation FiltersViewController


- (void)viewDidLoad
{
    [super viewDidLoad];

    self.selectedRowObjects = [NSMutableSet setWithCapacity:10];
}

- (IBAction)filtersSelected:(id)sender {
    [self.delegate filtersSelected:self.selectedRowObjects];
}

- (IBAction)cancelFilterSelection:(id)sender {
    [self.delegate filterSelectionCancelled];
}

- (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];
}


#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"filter" forIndexPath:indexPath];
    cell.textLabel.text = [NSString stringWithFormat:@"%u", indexPath.row];



    return cell;
}

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


    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *obj = cell.textLabel.text;

    if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [self.selectedRowObjects removeObject:obj];
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [self.selectedRowObjects addObject:obj];
    }

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}
@end

您还需要检查 cellForRowAtIndexPath 。将此代码写入此

if([[NSUserDefaults standardUserDefaults] objectForKey:[self getKeyForIndex:indexPath.row]])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}

是的,不要忘记在 didSelectRowAtIndexPath 中调用此方法

[self checkedCellAtIndex:indexPath.row];

Enjoy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当用户多次加载视图时,在 uitableview 上保存附件复选标记 的相关文章

随机推荐

  • .Net Core 2.1不读取用户机密

    我正在 Mac 上运行 net core 2 1 应用程序 并且尝试访问我的连接字符串 该字符串应该被我的用户机密覆盖 csproj 文件包含一个 guid
  • 使用 Python 将 CSV 文件导入 sqlite3 数据库表

    我有一个 CSV 文件 我想使用 Python 将该文件批量导入到我的 sqlite3 数据库中 命令是 import 但似乎不能这样工作 谁能给我一个如何在 sqlite3 中做到这一点的例子 我使用 Windows 以防万一 谢谢 im
  • 将图像添加到警报视图

    当用户按下添加按钮时 我会弹出一个警报视图 如何将图像添加到警报视图 我添加了一些从堆栈溢出中引用的代码 我的保存按钮被图像替换 并且图像看起来是蓝色的 警报视图代码 var alert UIAlertController title Sp
  • 直线运动卡顿

    我创建了简单的 与帧无关的 可变时间步长的线性运动Direct3D9 using ID3DXSprite 大多数用户无法注意到它 但在某些 包括我的 计算机上它经常发生 有时甚至会很卡顿 口吃发生于VSync启用和禁用 我发现同样的情况发生
  • UIToolbar 中工具栏项目之间的分隔符

    如何在 UIToolbar 中的按钮之间添加分隔符 示例图像显示在下面的链接中 我使用自定义视图按钮完成此操作 背景为 1 像素宽 UILabel label UILabel alloc initWithFrame CGRectMake 0
  • 通过 initWithRootViewController 以外的方法设置 UINavigationController 的 rootViewController

    我该如何设置rootViewController of UINavigationController通过除initWithRootViewController 我想用initWithNavigationBarClass toolbarCla
  • 如何使用javascript转义正则表达式特殊字符? [复制]

    这个问题在这里已经有答案了 我需要使用 java 脚本转义正则表达式特殊字符 我怎样才能实现这一点 任何帮助都值得赞赏 感谢您的快速回复 但是我需要转义正则表达式的所有特殊字符 我已经尝试过这段代码 但我无法达到结果 RegExp esca
  • 惯用缓冲 os.Stdout

    os Stdout Write is an 无缓冲的写 为了得到一个buffered写 可以使用以下内容 f bufio NewWriter os Stdout f Write b 问题 有没有更惯用的方法来获取buffered outpu
  • NSTextAttachment 图像未显示在 NSTextView 中(但显示在 UITextView 中)?

    我在获取时遇到问题NSTextAttachment工作图像NSTextView对于 OS X 应用程序 的形象NSTextAttachment只是根本不显示 然而 它似乎仍然设置正确 因为在复制内容的时候NSTextView并将其粘贴回例如
  • FindControl 返回空值

    我试图根据相关文本框控制按钮的状态 除了前缀之外 名称均相同 文本框和按钮位于页面上的表格中
  • 以编程方式将击键发送到 Groovy 或 bat 脚本中的窗口程序

    背景故事 我需要以编程方式查找两个文件之间的差异 我想使用 WinMerge 生成一个报告 工具 gt 生成报告 我可以解析该报告以获取两个文件之间的差异 我需要使用 Groovy 脚本或 bat 脚本来完成此操作 我希望 WinMerge
  • 在 Selenium Webdriver 中,如何获取元素后面的文本?

    我想获得恰好位于特定元素之后的文本 请看示例代码 div class h4 Sender h4 p span class screenHidden Name span submitter br span class screenHidden
  • nginx - php-fpm 集群

    我有三台 php fpm 服务器和一台 nginx 服务器 我想使用 nginx 服务器对 php fpm 进行负载平衡 php fpm 服务器1 192 168 10 31 php fpm 服务器2 192 168 10 32 php f
  • Meteor - 无法在 Windows 8.1 上运行 tasklist.exe

    我使用 Windows Installer 安装了最新版本的 Meteor v 1 1 0 2 我使用的是 Windows 8 1 一切似乎都已正确安装 因为我能够使用创建新的流星项目meteor create projectName 当我
  • 编译器不会为多态常量值选择类型类

    我是 Haskell 的新手 所以请提前原谅我 为什么以下 haskell 代码无法编译 编译器似乎无法看到表达式的类型 maxBound a is a其中有一个Enum提供了实例 而不是一些type variable a0 这是ambig
  • 如何获取嵌入式 MATLAB 函数的内容

    我的 Simulink 模型中有一些嵌入式 MATLAB 函数 有没有办法获取此块的内容 您在编辑器中看到的文本 我的第一个猜测是使用 find system 获取嵌入的 MATLAB 函数 然后使用 get param 获取内容 但我没有
  • 无法将mongodb容器连接到docker中的节点容器

    我用 2 个镜像制作了 3 个 docker 容器这个仓库 https github com Samar 080301 MernCrudApp1 使用 MongoDB 公共镜像 我使用以下命令打开了所有三个容器sudo docker com
  • 是否可以在 Vim 中以不同的方式显示分页符号?

    One of the nice things about Vim is that one can insert a page feed symbol Ctrl L in Insert mode which delegates the pri
  • n 个字符或至少 m 个字符的正则表达式

    这应该是一个非常简单的正则表达式问题 但我在任何地方都找不到任何答案 如何制作一个正则表达式 它只匹配 2 个字符 或至少 4 个字符 这是我当前的方法 忽略正则表达式本身 这不是重点 A Za z0 9 2 A Za z0 9 4 然而
  • 当用户多次加载视图时,在 uitableview 上保存附件复选标记

    因此 我实现了一个带有 tableview 的 UIViewController 基本上它作为我的 uicollectionview 的一组 过滤器 加载 现在 当我单击表格视图中的复选标记时 它会相应地 过滤 我的单元格 但现在当我再次重