UITableView 中具有多个部分的搜索控制器

2024-05-25

我有一个 UIViewController,其中有一个 UITableView,在该表视图内我有多个部分,其中有一些项目,我必须在该表视图内使用项目名称进行搜索。我已经在我的视图控制器中声明了这一点

let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
    super.viewDidLoad()
    searchController.dimsBackgroundDuringPresentation = false
    definesPresentationContext = true
    tableView.tableHeaderView = searchController.searchBar
    searchController.searchBar.barTintColor = UIColor(red: 39.0/255.0, green: 203.0/255.0, blue: 192.0/255.0, alpha: 1.0)
    searchController.searchBar.tintColor = UIColor.white
    searchController.searchBar.placeholder = "Search item"

    var sections = [Category A, Category B, Category C]
    var itemsA = [["Item": "item A","ItemId" : "1"],["Item": "itemB","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
    var itemsB = [["Item": "item A","ItemId" : "1"],["Item": "itemB","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
    var itemsC = [["Item": "item A","ItemId" : "1"],["Item": "itemB","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
 }

func numberOfSections(in tableView: UITableView) -> Int {
    if searchController.isActive {
        return 1
    }
    return self.sections.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if searchController.isActive {
        return filteredShops.count
    }
switch (section) {
    case 0: 
       return itemsA.count
    case 1: 
       return itemsB.count
    default: 
       return itemsC.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell

    if searchController.isActive {
         let filter = filteredShops[indexPath.row]
         cell.storeName.text = filter["itemName"]
    }
    switch (indexPath.section) {
        case 0: 
            //Access itemsA[indexPath.row]
        case 1: 
            //Access itemsB[indexPath.row]
        default: 
           //Access itemsC[indexPath.row]
    }
 return cell
}

func filteredshops(_ searchText: String, scope: String = "All") {
    let filteredShopsA = storeLists.filter({ item in
        if let name = item["itemName"], let query = searchController.searchBar.text {
            return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
        }
        return false
    })
    let filteredShopsB = medicalLists.filter({ item in
        if let name = item["itemName"], let query = searchController.searchBar.text {
            return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
        }
        return false
    })
    let filteredShopsC = restaurantsLists.filter({ item in
        if let name = item["itemName"], let query = searchController.searchBar.text {
            return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
        }
        return false
    })
    filteredShops = filteredShopsA + filteredShopsB + filteredShopsC
    print(filteredShops)
    tableView.reloadData()
}

我有 SearchResultUpdate 的扩展

extension NearByShopVC: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        filteredshops(searchController.searchBar.text!)
    }
}

我已经提到了这个问题,但没有找到任何解决方案如何过滤“updateSearchResultsForSearchController”中的字典数组以使用 Swift 搜索 UITableView https://stackoverflow.com/questions/37245342/how-can-i-filter-an-array-of-dictionaries-in-updatesearchresultsforsearchcontro

我尝试没有上述问题中的部分,然后也没有显示正确的结果。谢谢你!!


一种方法是当您过滤单个部分的工作时,因此首先更改您的filteredshops像这样。

func filteredshops(_ searchText: String, scope: String = "All") {
    let filteredShopsA = itemA.filter({ item in
        if let name = item["itemName"], let query = searchController.searchBar.text {
            return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
        }
        return false
    })
    let filteredShopsB = itemB.filter({ item in
        if let name = item["itemName"], let query = searchController.searchBar.text {
            return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
        }
        return false
    })
    let filteredShopsC = itemC.filter({ item in
        if let name = item["itemName"], let query = searchController.searchBar.text {
            return name.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
        }
        return false
    })
    filteredShops = filteredShopsA + filteredShopsB + filteredShopsC 
    tableView.reloadData()
}

现在用 tableView 方法像这样进行更改。

func numberOfSections(in tableView: UITableView) -> Int {
    if searchController.isActive {
        return 1
    }
    return self.sections.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchController.isActive {
        return filteredShops.count
    }   
    switch (section) {
    case 0: 
       return itemsA.count
    case 1: 
       return itemsB.count
    default: 
       return itemsC.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
    if searchController.isActive {
        //Access filteredShops array 
    }  
    else {  
        switch (indexPath.section) {
        case 0: 
            //Access itemsA[indexPath.row]
        case 1: 
            //Access itemsB[indexPath.row]
        default: 
            //Access itemsC[indexPath.row]
        }
    }
    return cell
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITableView 中具有多个部分的搜索控制器 的相关文章

  • 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

    我正在尝试禁用一些密码 弱 例如单个 DES 单个 DES 40 位等 我尝试过使用这段代码在 Cocoa 中使用 CFSocket CFStream 时如何设置 SSL 密码 https stackoverflow com questio
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行

    我遇到一个问题 在重新排序 UITableViewCells 时 tableView 不随单元格滚动 仅出现一个空白行 任何后续滚动都会出现数组越界错误 堆栈跟踪中没有我的任何代码 这是该问题的快速视频 http www screencas
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • Flutter 应用程序在 iOS 平台的 firebase 电话身份验证中崩溃

    我在我的项目中实现了 Firebase Phone auth 在 Android 端 一切正常 但对于 iOS 端 当我尝试从我的端发送验证码时 应用程序崩溃并失去连接 我已在下面提交了我的代码 主程序 dart class MyApp e
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • iPhone X 将对象底部与安全区域对齐会破坏其他设备上的外观

    关于 iPhone X 自动布局怪癖的问题 我有两个按钮 以前这些按钮将与超级视图底部对齐 偏移量为 20 以免它们接触屏幕底部 此后我将链接更改为安全区域而不是超级视图 Here s the original setup Looks go
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • 使用数组中的字符串淡入/淡出标签

    func setOverlayTitle self overlayLogo text Welcome var hello String Bon Jour GUTEN nMORGEN BONJOUR HOLA BUENOS D AS BUON
  • UIViewController 不旋转到横向

    在许多情况下需要旋转控制器但不起作用 现在我遇到了相反的问题 它正在旋转 我想禁用它 在那个 ViewController 中我有这个 BOOL shouldAutorotateToInterfaceOrientation UIInterf
  • Swift:长按手势识别器 - 检测轻击和长按

    我想连接一个动作 如果手势是点击 它会以特定的方式为对象设置动画 但如果按下持续时间超过 0 5 秒 它会执行其他操作 现在 我刚刚连接了动画 我不知道如何区分长按和点击 如何访问新闻持续时间以实现上述目的 IBAction func ta
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • AVAudioPlayer 无法从网站播放 m4a 或 mp3 文件类型

    我试图在我的应用程序中找到一个仅纯 m4a 声音的 URL 我有音频的 URL 理论上可以下载它 然后 使用下载的文件URL到声音 我尝试使用AVAudioPlayer播放它 但它不播放任何声音 这是我的代码 在 URL 检索函数中 我调用
  • 在 iOS 上使用 RNCryptor 异步解密大文件

    我需要在 iOS 上使用 RNCryptor 异步解密一个大文件 以便显示进度条 我在任何地方都找不到示例 因此尝试了我猜对的方法 但是 我想出的方法不起作用 解密器的处理程序从未被调用 并且线程在发送所有数据后因 EXC BAD ADDR
  • 从现有坐标地图套件中查找最近的位置

    我正在为拥有多家商店的客户开发 iPhone 应用程序 目标 C 我有数组中所有商店 20 的坐标 纬度 长 目前我正在考虑循环遍历商店坐标数组并获取从用户当前位置到商店位置的距离 然后将它们添加到数组中并按最小距离进行排序 这是正确的方法

随机推荐

  • 如何将文本插入摩纳哥编辑器?

    我的应用程序中嵌入了摩纳哥代码编辑器 如何以编程方式在特定行上插入文本 var editor monaco editor create document getElementById container value First line n
  • 推荐用于小型站点的 IRC 服务器 (ircd)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 情况 我想使用 IRC 机器人作为我正在研究的其他代码的通用通信接口 服务器硬件陈旧且内存不足 但运行在相对最新的 Debian GNU
  • 创建带有蒙版的 ImageView

    我关注了有关该主题的其他一些问题 以及 XferModes 上的 API 演示 并尝试创建一个根据 alpha 掩码屏蔽其内容的 ImageView Alpha 位图包含 0 alpha 表示要隐藏的区域 255 alpha 表示要显示的区
  • Javascript:生成具有固定平均值和标准差的随机数

    我的问题 如何在 Javascript 中创建具有给定平均值和标准差 sd 的随机数列表 Example 我想创建一个包含 5 个范围在 1 到 10 之间的随机数的列表 生成的平均值应为 5 标准差应为 2 到目前为止我所做的 我的想法是
  • 为什么 std::optional::operator=(U&&) 要求 U 是非标量类型?

    对于可选的template
  • 如何将当前用户信息传递到 DDD 中的所有层

    类似的问题以前曾被问过 但不完全相同 除非我错过了 我想通过我的服务 域 域事件 域事件处理程序传递 IUserInfo 类实例 什么是最好的方法 我是不是该 通过注册使用 IoC 注入它 针对 Httpcontext Current se
  • Bash 参数引号和 eval

    我编写了一个 bash 日志记录库 用我公司当前正在使用的一些复杂脚本来实现 在进行日志调用时 我一直致力于提供调用脚本的脚本文件名 BASH SOURCE 和行号 LINENO 但是 我不想依赖用户或实现脚本来将这两个变量作为参数传递 如
  • Ruby 1.9.3 多核?

    昨天我读了一些关于 ruby 中线程的内容 比如本文 http www engineyard com blog 2011 ruby concurrency and you 而我一般的理解是 除了一些像 JRuby 这样的实现 有所谓的全局解
  • css中为什么要用空格来分隔事物

    这是 wordpress 样式表中我不明白的内容 blockquote cite blockquote em blockquote i font style normal blockquote 和 cite 之间的空格有什么作用 我知道如果
  • 输入类型货币格式,带逗号和小数位 2

    我只是想问如何制作输入类型文本的货币格式的JavaScript 当您输入数字时 数字是否可能带有逗号 另外 如何使数字固定为 2 个小数 如果我输入 3 位小数 最后一个数字将四舍五入 因此可以是 2 位小数 我有一个仅接受数字的文本框 我
  • 模块不是任务或 void 函数

    我正在尝试在 Verilog 中创建一个用于进位选择加法器的模块 除了以下部分导致编译错误之外 一切正常 module csa a b s cout input 15 0 a b output 15 0 s output cout wire
  • WPF圆形奇怪边框

    Hi 我现在已经尝试了 2 天多的时间来创建处于按下状态的切换按钮 如上图所示 但上边框让我头疼 有谁知道如何创建向下的圆角 背景是从上到下的线性渐变 b8c7d6 a8b3c4 任何帮助将不胜感激 我有这样的东西 但它与设计相去甚远
  • 我的应用程序重新启动后房间数据丢失

    我的应用程序中有一个 Room 的简单实现 它有两个实体 应用程序运行时它工作正常 但应用程序重新启动后我看不到任何数据 这是我的数据库创建代码 Database entities Person class College class ve
  • 如何在 NetBeans 中以调试模式单步执行已实现的方法?

    我有课XImpl java它实现了一个接口X java 以及所有它的方法 我调试项目 在执行流程中遇到一个方法X processSomeValue 现在 当我尝试进入该方法时processSomeValue 我无能为力 有什么办法可以让我进
  • 为什么 np.linalg.norm(..., axis=1) 比写出向量范数公式慢?

    标准化矩阵的行X对于单位长度 我通常使用 X np linalg norm X axis 1 keepdims True 在尝试优化算法的此操作时 我非常惊讶地发现在我的机器上写出标准化的速度大约快了 40 X np sqrt X 0 2
  • SQL Server 中临时表的使用

    这是一个悬而未决的问题 但我真的很想听听人们的意见 我很少使用显式声明的临时表 表变量或常规 tmp 表 因为我相信不这样做会导致更简洁 可读和可调试的 T SQL 我还认为 在需要时 例如当您在查询中使用派生表时 SQL 可以比我更好地利
  • 关闭 bootstrap-select / select2 的自动对焦

    http www bootply com YAQrE52K6X http www bootply com YAQrE52K6X dataCombo selectpicker multiple true div class container
  • ZipResourceFile 无法解析为类型

    我正在尝试重写我的应用程序以使用 APK 扩展文件 我一直在关注这里的文档http developer android com google play expansion files html http developer android
  • Scala 函数定义参数列表中不同的括号样式

    Scala 中以下两个函数定义有什么区别 1 def sum f Int gt Int a Int b Int Int code 2 def sum f Int gt Int a Int b Int Int code SBT 的控制台 RE
  • UITableView 中具有多个部分的搜索控制器

    我有一个 UIViewController 其中有一个 UITableView 在该表视图内我有多个部分 其中有一些项目 我必须在该表视图内使用项目名称进行搜索 我已经在我的视图控制器中声明了这一点 let searchController