首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Objective C中通过比较多个数组在TableView中显示复选标记

在Objective C中,可以通过比较多个数组来在TableView中显示复选标记。下面是一个完善且全面的答案:

在Objective C中,可以通过以下步骤来实现在TableView中显示复选标记:

  1. 创建一个TableView,并设置其代理和数据源。
  2. 定义一个数组来存储所有的数据源,每个元素代表TableView中的一行数据。
  3. 定义一个数组来存储被选中的行的索引。
  4. 在TableView的代理方法tableView:cellForRowAtIndexPath:中,根据indexPath获取当前行的数据,并根据被选中的行的索引数组来确定是否显示复选标记。
  5. 在TableView的代理方法tableView:didSelectRowAtIndexPath:中,根据被选中的行的索引数组来判断当前行是否已经被选中。如果已经被选中,则从被选中的行的索引数组中移除该索引;如果未被选中,则将该索引添加到被选中的行的索引数组中。
  6. 在TableView的代理方法tableView:shouldHighlightRowAtIndexPath:中,返回NO,以禁止行被高亮显示。
  7. 在TableView的代理方法tableView:didDeselectRowAtIndexPath:中,将被取消选中的行的索引从被选中的行的索引数组中移除。
  8. 在TableView的代理方法tableView:accessoryTypeForRowWithIndexPath:中,根据被选中的行的索引数组来确定是否显示复选标记。

下面是一个示例代码:

代码语言:txt
复制
// 定义数据源数组
NSArray *dataArray = @[@"数据1", @"数据2", @"数据3", @"数据4", @"数据5"];

// 定义被选中的行的索引数组
NSMutableArray *selectedRows = [NSMutableArray array];

// 在tableView:cellForRowAtIndexPath:方法中实现以下代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"];
    }
    
    cell.textLabel.text = dataArray[indexPath.row];
    
    // 根据被选中的行的索引数组来确定是否显示复选标记
    if ([selectedRows containsObject:indexPath]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    
    return cell;
}

// 在tableView:didSelectRowAtIndexPath:方法中实现以下代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // 判断当前行是否已经被选中
    if ([selectedRows containsObject:indexPath]) {
        [selectedRows removeObject:indexPath];
    } else {
        [selectedRows addObject:indexPath];
    }
    
    [tableView reloadData];
}

// 在tableView:shouldHighlightRowAtIndexPath:方法中实现以下代码
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

// 在tableView:didDeselectRowAtIndexPath:方法中实现以下代码
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    [selectedRows removeObject:indexPath];
    
    [tableView reloadData];
}

// 在tableView:accessoryTypeForRowWithIndexPath:方法中实现以下代码
- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {
    // 根据被选中的行的索引数组来确定是否显示复选标记
    if ([selectedRows containsObject:indexPath]) {
        return UITableViewCellAccessoryCheckmark;
    } else {
        return UITableViewCellAccessoryNone;
    }
}

这样,通过比较多个数组,就可以在TableView中显示复选标记了。

希望以上答案对您有帮助。如果您需要了解更多关于Objective C、TableView以及其他相关技术的信息,您可以参考腾讯云的开发者文档:Objective C开发指南

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Swift-MVVM 简单演练(一)

但是,objective-c就没有这么友好,如果在原方法上增加参数,那么之前调用过此方法的地方,就会全部报错。...基类控制器的setupUI(设置界面)的方法里面,我们直接创建了tableView,那么我们如果有一个标记,能根据这个标记来选择是创建普通视图,还是创建访客视图。就可以很好的解决此类问题了。...增加一个用户登录标记 /// 用户登录标记 var userLogon = false 根据标记判断视图显示 userLogon ?...如果没有 通过网络请求加载默认的.json文件 如果有 直接使用沙盒里面保存的.json文件 网络请求异步加载新的.json文件,等下一次用户再次启动APP的时候就可以显示比较新的配置文件了 AppDelegate...总结 使用代理传递消息是为了控制器和视图之间解耦,让视图能够被多个控制器复用,如TableView 但是,如果视图仅仅是为了封装代码,而从控制器剥离出来的,并且能够确认该视图不会被其它控制器引用,

10.2K51

窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用

协议与委托代理回调在之前的博客也是经常提到和用到的Objective-C的委托(代理)模式》和《iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流...说到协议,Objective-C也是有协议的,并且Swift的协议和Objc的协议使用起来也是大同小异的,Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift或者...一.从UITableView来窥探协议的委托代理回调     UITableView这个高级控件iOS开发的出镜率是比较高的,今天的重点不是介绍如何使用UITableView, 而是让通过UITableView...上显示的数据了,正常开放这些数据往往来源于网络请求,而在本篇博客中就模拟数据源,来为我们的TableView提供显示的数据。...数据源的格式是一个数组,而数组存放的是多个字典,每个字典有两个键值对,一个键值对存储要显示图片的文件名,另一个键值对则存储美女的名字。为了使该数据的存储结构,请看下方结构图。 ?

3.3K80

RxSwift介绍(一)——RxSwift初探

之前介绍了RACObjective-C环境下RACSignal信号订阅使用流程、宏定义以及各种信号的操作使用。作为函数式响应编程的代表,就不得不提RxSwift。...我自己的感受是,虽然学习曲线比较陡峭,学习成本很高,一旦掌握了其开发技巧,收获要比想象多,值得去学习并实践的框架。 接下来先看一个最常用的例子,swift环境搭建一个简单的tableView。...这里往往需要遵循TableView相关的各种代理方法,下面是使用结构体生成一串简单的数组并放入tableView显示内容。...RxSwift,不再需要去挨个遵循tableView的各种代理方法,直接上修改后的代码 class ViewController: UIViewController { lazy...视图控制器或者其持有者将要销毁的时候,会自动释放掉绑定在它上面的资源。它是通过类似“订阅处置机制”方式实现(类似于 NotificationCenter 的 removeObserver)。

3K40

swift4.0语法杂记(精简版)

某些开发者为了让Objective-C和swift代码兼容,会尽少Objective-C定义宏。...swift与objective-C的重大区别 swift是没有.h和.m文件之分的。所有的代码全部都存储一个文件里面。...数组是有序数据的集,集合是无序无重复数据的集,而字典则是无序的键值对的集。 数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置。...类似于objective-c的block,其实函数就相当于一个特殊的闭包。闭包需要提前写好,适当的时候再执行。... Swift 4 ,隐式 @objc 自动推断只会发生在很少的当必须要使用 @objc 的情况,比如: 复写父类的 Objective-C 方法 符合一个 Objective-C 的协议 其它大多数地方必须手工显示的加上

15.2K90

iOS工程师必看的 20 道 面试题

Objective-C,字符串,数组,字典,皆被设计为引用类型。 值类型相比引用类型,最大的优势在于内存使用的高效。值类型栈上操作,引用类型堆上操作。...Swift和Objective-C的混编项目中,如何在Swift文件调用Objective-C文件已经定义的方法?如何在Objective-C文件调用Swift文件定义的方法?...Swift若要使用Objective-C代码,可以ProjectName-Bridging-Header.h里添加Objective-C的头文件名称,Swift文件即可调用相应的Objective-C...试比较Swift和Objective-C的初始化方法(init)有什么异同? 一言以蔽之,Swift的初始化方法更加严格和准确。...具体过程是Objective-C对象调用方法时,如self.tableview reload,发生了两件事。

3.7K40

Mac开发之 Cocoa 绑定 入门

图片来自网络 从iOS开发转为Mac OSX应用开发的过程,cocoa 绑定算是比较大的一个差异,也是OSX上比较实用的技术,cocoa 绑定让开发者节省了大量的代码,可以快速的完成一个应用开发.本文将从三个方面为新入门...). 2.为什么使用绑定在日常开发,我们为了项目代码更易于维护,会将程序代码划分为独立模块或封装类,其中最基础的就是使用模型(M)-视图(V)-控制器(C)进行协调工作.然而,某些情况下,编写相互分离的模型...,如果你使用Objective-C来构建工程,就会发现运行的效果正确,这是因为Swift默认是关闭了KVO的属性监听,我们只需要开启就可以了,Person类,给score属性前面,添加一个关键字dynamic...它们的显示.下面我们通过点击鼠标来修改一下son的socre值,ViewController,添加下面的代码后看看结果吧....的默认系统,下面我们通过一个简单的例子来看看如何使用NSUserDefaultsController吧,let's do it~ (1)新建一个cocoa 应用,并添加一个复选框,用于存储用户设置;添加一个

1.8K20

Jekyll-Admin-Mac 开发纪要-左侧菜单栏

本博客将在 6月底停止 简书的更新,全新的博客地址请点击前往-> 君赏博客 本文章文字大约 4500字,大概花费 10分钟阅读。本文章设计的图片比较多,流量党慎入!。...Xcode6使用IBDesignable创建自定义控件(翻译) 关于如何 NSView自定义背景颜色参考下面的连接 我们设置 NSView为继承与 BaseView 背景颜色试图。...修改 Window的最小显示区域 我们可以通过下面设置 window的最小值。 ? 这样我们可以让 Window可以保持最小的尺寸是 600x500。...,多个需要放在数组里面。...BC3FC205-DB67-4781-A977-FFC2DDFF1949 我们通过界面查看器可以看的出来,第一个 Row已经出来了,但是却因为没有设置无法显示

2K10

Ios常用第三方框架(二)

ios-charts - 一款优秀 Android 图表开源库 MPAndroidChart 的 Swift 语言实现版(支持 Objective-C 和 Swift 调用)。...缺省提供的示例代码为 Objective-C。 TEAChart - xhacker/TEAChart 一个简洁的 iOS 图表库,支持柱状图、饼图以及日历等。...该项目通过三种形式展示页面之间的切换,比如导航栏上的多个tab切换、页面左右两端箭头指示切换,以及使用分段控件。...MGSwipeTableCell - 另一个常见于很多应用的UI组件,苹果应该考虑标准的iOS SDK中加入一些类似的内容。Swipeable表格cell是这个pod的最佳描述,也是最好的。...功能相当于 Objective-C 版 RKSwipeBetweenViewControllers。 RKSwipeBetweenViewControllers - 页面滑动和标签选项卡类库。

7.6K60

Swift - MJRefresh库的使用详解1(配置,及库自带的下拉刷新组件)

MJRefresh 是其中比较优秀的一个。 一、MJRefresh介绍 (1)MJRefresh 是一个使用 Objective-C 写的刷新库,使用简单。...5815fb4e8c590.png (1)对于下拉的响应事件,我们可以通过设置其 target action 来关联。...mj_header.endRefreshing() } //本例,只有一个分区 func numberOfSections(in tableView: UITableView) -> Int...会显示刷新的状态提示文字,刷新时间,左侧还有箭头或环形进度条表示刷新状态。 ? 5815fb4e8c590-1.png 2,隐藏时间 ?...不同的状态,我们都可以设置一个图片数组,MJRefresh 就会自动播放这几张图片,形成动画。 其中下拉过程的图片是根据下拉的距离自动改变。

5.4K31

(转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController

一些开源社区上分享的效果比较炫的代码,有不少是使用UICollectionView做的,UICollectionViewController是很实用的,很有必要好好的搞一下。 一....UIScreen, UIWindow, UIViewController, UIPresentationController 和 UIView)都实现了UITraitEnvironment 这个接口,可以通过这个接口来做一些控件显示...3.代码实现相应的代理,和TableView非常类似 (1) 返回Section个数的方法 Objective-C - (NSInteger)numberOfSectionsInCollectionView...:(UICollectionView *)collectionView { return 1; } (2) 返回每个SectionCell个数的方法 Objective-C - (NSInteger...Cell重用标示符来选择和重用Cell Objective-C - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView

5.5K40

iOS 面试策略之语言工具-Xcode使用

[1240] Xcode 诞生于 2003 年,发展至今,已经可以支持除 Objective-C 和 Swift 之外其他 6 种语言:CC++与 Objective-C 密不可分;自动化方面则多用...所以优化的手段也有了,简单来说就是: 减少动态库数量,dylib loading time 会下降,苹果的推荐是动态库不要多于 6 个 减少 Objective-C 的类数量,例如合并或者删除,这样可以加快动态链接...,如下图: [image] Playground 技巧 6.实际开发,我们会测试网络请求收到的数据。...要调试 api.org/get 是否工作,工程师 Playground 写下了以下代码。假设 API 和网络正常工作,请问这段程序将会打印出什么内容?...代码实现:请在 playground 实现一个 10 行的列表,每行随机显示一个 0 – 100 之间的整数。

1.7K20

AsyncDisplayKit 2.0 教程:入门「译」

第二部分,你将学习如何构建自己 node 的 subclass,以及如何使用ASDK强大的布局引擎。为了更好的完成本教程,你需要会使用 Xcode 以及 熟悉 Objective-C。...出于这些原因,本系列将重点介绍 Objective-C。话虽这么说,我们已经包括了一个Swift版本的实例项目。(嘴上说没有,代码还是很诚实的~) 开始 首先,下载初始项目。...记住,iOS应用程序的所有屏幕上的显示通过CALayer对象表示的。UIViews 创建并且拥有一个底层的 CALayer,并为他们添加触摸处理和其他交互功能。...image.png 真是一个流畅的 tableView!一旦你开始做了,那就让我们做的更好吧! 无限滚动 大多数应用,服务器的数据点的个数往往会多于当前 tableView 显示的单元格数量。...智能预加载(续) 2.0 版本,已经介绍了多个维度上智能与加载的概念。假设你有一个竖直滚动的tableView,在其中某些Cell包含了水平滚动的 collectionView。

2.1K20

IOS开发之新浪围脖

(3)上面的数据是通过API获取的,获取完后再显示我们的tableView,将会提供一些关键的实现代码,准备工作是新建三个TabelViewController然后配置相应的cell。...4.block回调把返回的JSON解析成数组并加载到我们的表示图     (4).把数据显示表视图上 1 - (NSInteger)numberOfSectionsInTableView:(UITableView...error localizedDescription]); } NSLog(@"%@", dic); }];   到此微博发送成功,会在我们自己的新浪微博的主页显示我们模拟器的文本输入的东西了...,因为我添加的应用的access_token没有申请审核,所以会显示“来自未通过审核应用”,截图如下: ?   ...啦,至于想深入的了解一下block回调,请参考前面的博客Objective-C的Block回调模式。

1.2K50

测试 View Controllers

示例程序,我们有个包含数组的 data source 需要测试。这个 data source 会在某个时候从 table view 取出(dequeue)一个 cell。...Objective-C 中有个用来 mocking 的强大工具叫做 OCMock。它是一个非常成熟的项目,充分利用了 Objective-C 运行时强大的能力和灵活性。...这个上古神器从 1997 年起就伴随 Objective-C 开发者左右,比第一款 iPhone 发布还早 10 年。现在,它已经集成到 Xcode 中了。...这些宏和Xcode 集成,会把失败显示到侧边面板的Issues导航栏。...省略注入的如何工作的细节(它本身是个巨大的话题),简单地说:注入是把待注入的 bundle(我们的测试 bundle)Objective-C 类添加到运行的应用程序

71220

2019最新iOS面试题及答案

答: Object-C的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效...对于单例的理解 答:objective-c要实现一个单例类,至少需要做以下四个步骤: 1).为单例对象实现一个静态实例,并初始化,然后设置成nil, 2).实现一个实例构造方法检查上面声明的静态实例是否为...我觉得最好也最简单的一个列子就是tableView图片的加载显示了。一个延时载,避免内存过高,一个异步加载,避免线程堵塞。 33. 是否一个视图控制器嵌入两个tableview控制器?...首先要了解什么是委托模式,委托模式iOS中大量应用,其设计模式是适配器模式的对象适配器,Objective-C中使用id类型指向一切对象,使委托模式更为简洁。...类里面声名一个私有方法 @private可以用来修饰私有变量 ObjectiveC,所有实例变量默认都是私有的,所有实例方法默认都是公有的 64.Object-C有多继承吗?

2.3K20

使用UITableView 简化登录注册界面

code>发现没有code demo,有些撩人啊,本着学习的态度,根据该文章的方法,写了个示例工程loginTableDemo,希望能对看了该文章的人在实践上有所帮助,同时欢迎大家指出代码的不足...不同的内容,要分成不同的cell,然后用tableView根据状态来加载这里也可以使用一个cell ,然后根据不同的枚举值,生成cell里的显示内容,这两种方式各有利弊,我个人倾向使用不同的...的方案增加了数据传递的成本,cell的按钮点击事件和文字输入事件与controller之间比较松散,我的示例... 整个界面UI非常朴素,就一个tableview,感觉逻辑也清晰,并且天然的具有动画效果,看起来还不错....>相信使用Objective-C的同学也可以看懂 最后,项目中Login文件夹(模块)可以直接拖到其他项目中使用,只需修改一下UI就是你自己的了.

1K20

iOS怎样创建可展开的Table View?(上)

在这个教程,我将会向你展示一个简单高效的方式来创建可展开的tableView.注意,你在这里所看到的并不是唯一的方法来实现这个功能.相当多的实现方法是基于app的需要,但是我的目标是是提出一种比较通用的方法...,它的每一项tableView里都代表一组.这就意味着,plist文件里,根数组里包含三个项(item),和我们想要在tableView显示的数量一样多....现在是最好花费你时间的时候了,更彻底地看这些属性以及所有那些我们将要显示tableView上cell的值.我们处理所需的代码时候,通过cell描述很容易理解,我们需要为创建并且管理可扩展的cell所写的已经明显变少了...程序的世界,那就意味着每个cell的行索引(index)不是不变的(我们写index.row来处理cell),因此我们使用cell行的时候,不能仅仅通过数据源数组.这是强制性的工作以及拿出提供可见...显示cell 了解了每次app运行的时候cell描述符都会被加载,我们继续吧,tableView显示cell.这部分我们会开始创建另一个新的函数,这个函数将会从cellDescriptors数组定位和返回合适的

1.8K50
领券