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

由于cellForRowAt仍在调用原始的未筛选数组,因此xCode TableView搜索结果无法正确显示

问题描述: 由于cellForRowAt仍在调用原始的未筛选数组,因此xCode TableView搜索结果无法正确显示。

解决方案: 在xCode中,当使用TableView进行搜索时,需要注意cellForRowAt方法仍然会调用原始的未筛选数组,导致搜索结果无法正确显示。为了解决这个问题,可以按照以下步骤进行操作:

  1. 创建一个新的数组来存储搜索结果,该数组将用于在cellForRowAt方法中获取正确的数据。
  2. 在搜索框的文本变化事件中,根据搜索框中的文本内容对原始数据进行筛选,并将筛选结果存储到新的数组中。
  3. 在cellForRowAt方法中,使用新的数组来获取正确的数据并显示在TableView中。

下面是一个示例代码:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var searchBar: UISearchBar!
    
    var originalData = ["Apple", "Banana", "Orange", "Mango", "Grapes"]
    var searchData = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.dataSource = self
        tableView.delegate = self
        searchBar.delegate = self
    }
    
    // MARK: - UITableViewDataSource
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return searchData.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = searchData[indexPath.row]
        return cell
    }
    
    // MARK: - UISearchBarDelegate
    
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        searchData = originalData.filter({ $0.lowercased().contains(searchText.lowercased()) })
        tableView.reloadData()
    }
}

在上述示例代码中,我们创建了一个originalData数组来存储原始数据,创建了一个searchData数组来存储搜索结果。在搜索框的文本变化事件中,我们使用filter方法对originalData进行筛选,并将筛选结果存储到searchData数组中。在cellForRowAt方法中,我们使用searchData数组来获取正确的数据并显示在TableView中。

这样,当用户在搜索框中输入文本时,TableView将根据输入的文本内容进行筛选,并正确显示搜索结果。

推荐的腾讯云相关产品:

  • 云服务器(CVM):提供弹性计算能力,满足各种业务需求。了解更多:腾讯云云服务器
  • 云数据库 MySQL 版(CDB):提供高性能、可扩展的 MySQL 数据库服务。了解更多:腾讯云云数据库 MySQL 版
  • 人工智能开放平台(AI):提供丰富的人工智能能力和服务,助力开发者构建智能应用。了解更多:腾讯云人工智能开放平台
  • 云存储(COS):提供安全、稳定、低成本的云端存储服务。了解更多:腾讯云云存储
  • 区块链服务(BCS):提供一站式区块链解决方案,帮助企业快速搭建和部署区块链网络。了解更多:腾讯云区块链服务

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行决策。

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

相关·内容

用这些 iOS 技巧让你 APP 性能更佳

你之前可能在tableView(_:cellForRowAt:)中使用了 tableView.dequeueReusableCell(withIdentifier:for:)。...译者注:文段中没有 Xcode,下文中提及为 Xcode 新建项目 为了让你应用感觉更快,你可以将启动页设计为与将向用户显示第一个页面(视图控制器)类似。...在多任务屏幕中,我们可以看到已放在后台应用程序列表。我们可以假设这些应用程序仍在后台运行;实际上,由于内存需求,一些应用程序可能会被系统杀死并重新启动。...用户退出应用程序时 iOS 截取应用程序截图(查看大图) iOS 使用这些屏幕截图来给人一种假象,即应用程序仍在运行或仍在显示此特定视图,而应用程序可能已被后台终止或重新启动,但此时仍显示相同屏幕截图...通过在Xcode中点击 ⏹ 按钮,停止程序运行。 再次启动应用程序并检查状态是否已成功还原。 由于本节仅涵盖了状态保存和恢复基础知识,因此我推荐 Apple Inc. 上以下文章。

3.2K30
  • 手把手带你撸一个网易云音乐首页(二)

    构建 App 框架 首先打开我们 Xcode 创建一个基于 Swift 编程语言 App 工程,并将它命名。...但是网易云音乐首页可不是那么回事了,它每个 Cell 呈现内容类型都是不同,这就导致我们无法通过复用 Cell 方式来呈现数据了, 那怎么样才能构建出正确视图呢! 首先,我们先来确定问题。...,所以我们需要对每种类型数据使用不同 UITableViewCell,因此我们需要使用正确 ViewModel 结构。...[section].rowCount } override func tableView(_ tableView: UITableView, cellForRowAt indexPath...,就需要对所有的 Section 加载数据进行抽象成一个公共类以便调用,所以这里我们使用了协议来处理。

    1.3K20

    iOS - Swift UITableViewscrollToRow

    分析 在无奈之下,经过了一步步探索,终于发现了问题所在 首先我们要了解一下scrollToRow执行后会调用哪些函数及顺序 会调用这两个方法 func tableView(_ tableView...接着执行程序得到如下结果 比如我原本有10条数据,现在加入了一条后执行了scrollToRow,它会 1.先调用 heightForRow 11次,即包括最新加入那一条 2.然后再调用 cellForRow...cellHeight变量) 执行程序得到�这个结果调用 heightForRow 11次,然后就没了 好吧,问题就出现在对heightForRow第11次调用,前10次都有返回具体高度,而最后一次是...所以在上面的情况中,发送完消息后,最新消息cell的确是插入到了tableView,也有显示出来(后面我自己测),但就是无法滚到最新消息那一行,就是因为 heightForRow 返回高度为0...: 0) // 调用tableView数据源办法 _ = self.tableView(tableView, cellForRowAt: indexPath) 在插入�最新消息后,调用tableView

    1.8K50

    Swift| 基础语法(五)

    前言 总结下 swift下基础语法,里面涉及到:常量&变量、Swift中数据类型、逻辑分支、循环、字符串相关、数组和字典、方法书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift...) -> CGFloat { return 60 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath...func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {...设置图标选中时颜色 UITabBar.appearance().tintColor = UIColor.clear return tabbarController } 这里特别说明下:默认选中标签图片和文字是灰色...,选中是蓝色,下面修改成橙色: //图片文字一起变色 self.tabBar.tintColor = UIColor.orangeColor() 如何显示原始图片颜色和图案?

    2K30

    Swift-MVVM 简单演练(一)

    最好去UINavigationItem头文件里面去找一下,你可以control + 6快速搜索color关键字,如果没有的话,建议你搜索attribute试试,因为一般设置属性方法都可以解决多数你想解决问题.../// 加载数据,具体实现由子类负责 func loadData() { } 绑定假数据测试 由于HQBaseViewController里面实现了tableViewtableViewDataSource...reloadData() } } ---- 登录视图显示(访客视图) 现实中经常会遇到一些临时增加需求,比如登录后显示是一种视图,登录又显示另外一种视图,如果你公司是面向公司内部APP...而在登录状态下,导航栏上面的按钮都是显示注册和登录。...登录之后才显示别的,因此,我们可以将HQBaseViewController中setupUI方法设置成fileprivate不让外界访问到,并且将setupTableView设置成外界可以访问,如果需要在登录后控制器里面显示所需样式

    10.3K51

    优雅处理网络数据,你真的会吗?不如看看这篇.

    image 如何实现 由于 Instagram UI 过于复杂,在这我就不去模仿实现了,但是我模仿了它加载机制,同样实现了一个简单数据无限滚动和无缝加载效果。...模拟分页请求 由于没有找到合适分页测试接口,我自己模拟了一个分页请求接口,每次调用该接口时候都会延时 2s 来模拟网络请求状态,代码如下: func fetchImages() {...我们可以在 tableView:willDisplayCell:forRowAtIndexPath: 这个方法中进行数据绑定,这个方法在显示cell之前会被调用。...为每个 Cell 执行下载任务实现代码如下: func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)...图片缓存 虽然我在上面对我应用增加了并发操作,但是我一看 Xcode 性能分析,我不禁陷入了沉思,我应用程序太吃内存了,假如我不停刷,那我手机应该迟早会把我应用给终止掉,下图是我刷到 200

    1.4K20

    【IOS开发基础系列】UISearch专题

    ",@"模糊搜索"];     bar.selectedScopeButtonIndex = 1;//通过下标指定默认选择那个选择栏     //7.控制搜索栏下部选择栏是否显示出来(需设置为YES...tableView,如果是显示就是搜索结果数据,   如果不是,是TableView自身view,则需要显示原始数据。...cell         对于搜索结果表视图,IOS并不会随着SearchVC退出而移除(应该是处于提高cell重用角度考虑),所以第二次进入视图时,默认其实还是显示上次搜素结果cell,一定要注意清除状态...searchVC.dimsBackgroundDuringPresentation = NO;      //适应整个屏幕     [searchVC.searchBar sizeToFit];      //设置显示搜索结果控制器...setHidesNavigationBarDuringPresentation: YES];     //适应整个屏幕     [_searchVC.searchBar sizeToFit];     //设置显示搜索结果控制器

    45320

    【IOS开发基础系列】Storyboard专题

    由于无法从nib中加载应用程序委托,也无法从故事板文件中加载应用程序委托,我们必须告诉UIApplicationMain 应用程序委托类名称,否则它根本无法找到应用程序委托类。...不要奇怪,我们还没有提供数据源,因此表视图中不会显示任何行。 2.3.3 创建PlayersViewController         加一个新 File 到项目中。...因此我们必须从viewControllers 数组中检索。(它有一个 topViewController 属性,但那个是位于viewControllers栈顶 view controller。...最终设计完成是这个样子:         由于是定制单元格,我们不再使用cell textLabel 和detailTextLabel 属性来显示文本。...前者更为简单,因此我使用了前者。 注意:如果你事先无法确定 cell 高度,或者你有不同高度几种 cell,你应该使用heightForRowAtIndexPath。

    1K30

    iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法实现+API不兼容奔溃,模拟多继承)

    动态特性:方法解析和消息转发(Method Resolution,Fast Rorwarding,Normal Forwarding),第三节将介绍方法交换几种实战场景:特定奔溃预防处理(调用实现方法...这些符号可在Xcode开发者文档中搜索Type Encodings就可看到符号对应含义,更详细官方文档传送门 在这里,此处不再列举了。 ?...当一个对象由于没有相应方法实现而无法响应某个消息时,运行时系统将通过forwardInvocation:消息通知该对象。...]; [self.view addSubview:tableView]; } 其中有一行会发出警告,Xcode也给出了推荐解决方案,如果你点击Fix它会自动添加检查系统版本代码,如下图所示:...*)anInvocation封装了原有消息调用,包括了方法名,方法参数等) 由于转发调用API与原始调用API不同,这里我们新建一个用于消息调用NSInvocation对象viewControllerInvocation

    2K11

    iOS中Cell约束--使用xib实现多label自动约束--高度随内容自适应

    实现cell高度自适应简单方法; 手动设置数据源,初始展示 如图,这是最简单tableView了,只有两个label,没有任何其他控件,在做任何处理情况下,我们发现,内容是会越界(跑屏幕之外...),首先第一步,我们得先解决这个问题,至少让内容都在屏幕内展示; 通过试图-发现内容越界 -->探索:难道是因为,tableView高度不够,比如高度只有44,内容就只能这样显示了吗? ...--> keyLabel不见了,因为我们做两个label都是自适应,所以并无法确定他们准确位置!...宽度,不需要我们再次设置; 展示内容如上 此时我们发现,有部分内容,还是被遮住了,label并不会完全显示出所有的内容 修改:label宽度稍微加一点 发生这种情况,是由于Xcode8.0之后,字体长度计算有了些许改变...高度方法 value高度计算 自动计算高度 最终结果 如图,我们发现,keyLabel宽度跟随内容自适应,vauleLabel宽度 随 keyLabel宽度自适应,valueLabel高度

    3.4K60

    关于 MVC 一个常见误用

    { return items.count } override func tableView(\_ tableView: UITableView, cellForRowAt...你几乎无法为添加/删除/修改待办列表进行 Model 层测试。...**ToDoEditViewController** 本身也无法和 items 通讯,因此它扮演角色几乎就是一个“专用” View,一旦脱离了 **ToDoListViewController**,...由于 Swift 数组是值类型,对于 **items** 元素增加,删除,修改或者整体变量替换,都会触发 **didSet** 调用。Swift 值语义编程带来了很大便利。...在此同时,所有的模型结果会被自动且正确地反应到 View 上,这为多 Controller 协同工作和更复杂场景提供了坚实基础。 这个例子修改后最终版本可以在这里找到。

    89950

    实践-做一个会性能调优好猿

    :从未使用过变量; 4、Api调用错误:包含使用库和框架。...,内存不会递增下去,通过这种分析结果,观察内存分配趋势,当发现不正确结果或者矛盾结果,就可以研究是不是Abandoned Momory问题,并可以修正这个问题了。...很多视图Layer由于Shadow、Mask和Gradient等原因渲染很高,因此UIKit提供了API用于缓存这些Layer,self.layer.shouldRasterize = true系统会将这些...Invert Call Tree:反向输出调用树。把调用层级最深方法显示在最上面,更容易找到最耗时操作。 Hide Missing Symbols:隐藏缺失符号。...过滤掉各种系统调用,只显示自己代码调用。 Flattern Recursion:拼合递归。将同一递归函数产生多条堆栈(因为递归函数会调用自己)合并为一条。

    1.1K20

    iOS逆向实战与工具使用(微信添加好友自动确认)

    因为知道当前视图有tableview,所以找到tableview对象。从上图可以看到该对象地址为0x18c4be00。 在使用 nextResponder()根据响应者往上找当前控制器。...使用 bt 查看调用栈信息,即哪些方法调用了当前方法,找到方法上游。(异步调用的话没办法查看) ? 第一个表示当前方法,可以看到在调用此方法前,该进程总共调用了3个方法。...看出r3确实是个数组,同时也得到了消息对象为CMessageWrap 证明我们是对。 解释下为什么要看r3,因为在 armv7 中,一个方法调用,一般寄存器都是这么存储。...有可能是在异步执行了消息数组获取。 因此,重复以上步骤,使用 logify 对CMessageMgr进行 Log 分析。...主要部分如下所示。 ? 通过分析,我们可以得到,确认好友申请,显示构造了CContactVerifyLogic对象。

    2K80

    对iOS应用中文本进行本地化

    对于UIKit框架,Xcode会让你选择storyboard关联方式,由于本文使用Demo项目[3]为全SwiftUI架构,因此不会有如下画面。...不知道大家注意没有,目前English文件是空,Chinese文件我们也只对四个内容设置了对应本地化文本。所有我们没有设置内容,app都将显示我们在代码中设置原始文本。...当你尝试添加或减少饮料数量时,文本中数量都会跟随变化。 请为你插值选择正确对应格式说明符,比如上面的例子如果设置为%d的话将被系统认为是另一个键而无法完成转换。...(maxWidth:.infinity,alignment: .leading) 在某些情况下,我们只能获得String类型数据,可能会经常做类似的转换 再次运行,你将可以看到表格中饮品名称已经更改为正确中文显示...在今年(2021),苹果对Formatter做了进一步升级,不仅提高了Swift下调用便利性,而且允许开发者通过新增FormatStyle协议创建双向格式转换方式。

    2.1K20
    领券