当前位置: 首页 > 编程笔记 >

iOS 表格检视标题中的搜寻列

谢阳曜
2023-03-14
本文向大家介绍iOS 表格检视标题中的搜寻列,包括了iOS 表格检视标题中的搜寻列的使用技巧和注意事项,需要的朋友参考一下

示例

本示例使用搜索控制器来过滤表视图控制器中的单元格。搜索栏位于表格视图的标题视图内部。表格视图的内容以与搜索栏相同的高度偏移,因此首先隐藏了搜索栏。向上滚动超过表格视图的顶部边缘时,将显示搜索栏。然后,当搜索栏变为活动状态时,它会隐藏导航栏。

将UITableViewController嵌入到UINavigationController中,以获取UINavigationItem(包含导航栏)。然后将我们的自定义ViewController类设置为继承自UITableViewController并采用UISearchResultsUpdating协议。

class ViewController: UITableViewController, UISearchResultsUpdating {

    let entries = [(title: "Easiest", image: "green_circle"),
                   (title: "Intermediate", image: "blue_square"),
                   (title: "Advanced", image: "black_diamond"),
                   (title: "Expert Only", image: "double_black_diamond")]
    
    // 一个空的元组,将使用搜索结果进行更新。
    var searchResults : [(title: String, image: String)] = []
    
    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()
        
       searchController.searchResultsUpdater= self
       self.definesPresentationContext= true

        // 将搜索栏放置在表格视图的标题中。
        self.tableView.tableHeaderView = searchController.searchBar

        // 将内容偏移设置为搜索栏高度的高度
        // 在首次显示视图时将其隐藏。
        self.tableView.contentOffset = CGPoint(x: 0, y: searchController.searchBar.frame.height)
    }
    
    func filterContent(for searchText: String) {
        // 使用匹配项更新searchResults数组
        // 在我们基于标题值的条目中。
        searchResults = entries.filter({ (title: String, image: String) -> Bool in
            let match = title.range(of: searchText, options: .caseInsensitive)
            // 如果范围包含匹配项,则返回元组。
            return match != nil
        })
    }

    // 标记:-UISearchResultsUpdating方法
    
    func updateSearchResults(for searchController: UISearchController) {
        // 如果搜索栏包含文本,请使用字符串过滤数据
        if let searchText = searchController.searchBar.text {
            filterContent(for: searchText)
            // 用搜索结果数据重新加载表视图。
            tableView.reloadData()
        }
    }

    // 标记:-UITableViewController方法
    
    override func numberOfSections(in tableView: UITableView) -> Int { return 1 }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 如果搜索栏处于活动状态,请使用searchResults数据。
        returnsearchController.isActive?searchResults.count: entries.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 如果搜索栏处于活动状态,请使用searchResults数据。
        let entry =searchController.isActive? 
                    searchResults[indexPath.row] : entries[indexPath.row]
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = entry.title
        cell.imageView?.image = UIImage(named: entry.image)
        return cell
    }
}
           

 类似资料:
  • 如何更改iOS 15中开始出现的节标题上方的额外填充?

  • 我有一个标题,占据了整个屏幕。 每次应用程序进入后台,然后回到前台/活动,我希望屏幕被设置回标题顶部。 我只见过与滚动到表格顶部有关的答案,这些答案使用类似于,但是不起作用,因为它只滚动回UITableView的第0行0,而不是UITableView标题的顶部。 有什么想法吗? 谢谢 编辑:尝试了这个 下面是一些值得注意的表格设置代码:

  • 是否有可能获得所有符合搜索条件(如投票数、语言、发行年份等)的标题的IMDb ID? 我的首要任务是编制一份清单,列出所有被归类为故事片的IMDb身份证,并有超过25,000张选票(也就是那些有资格的人出现在前250名名单上)。在发布这篇文章时,有4296部电影符合这一标准。 (如果您不熟悉IMDb ID:它是与数据库中的每个电影/人物/角色/等相关联的唯一7位数代码。例如,对于电影Drive(2

  • 搜寻 可输入关键词并于网络间搜寻,且会显示搜寻结果网页。搜寻履历会保存至以下其中一个位置: - Memory Stick™     - 主机内存   1. 选择(网络)的(网上搜寻)。 若要将搜寻履历保存至Memory Stick™,需先将Memory Stick™正确插入PSP™内 。 2. 选择(新搜寻)。 画面上会显示键盘。 3. 输入想搜寻的关键词,再选择〔确定〕。 与网络联机,并显示搜寻

  • 我正在研究具有动态单元格高度的表视图。 由于我的要求,我必须展示40种不同的cell.Each细胞是不同的。 例如。 一个单元有2个标签,一个图像视图另一个单元只有2个图像视图,另一个单元格有5个标签,1个文本视图,2个按钮,2个图像查看 我的问题是我无法静态定义高度。每个单元格中的.labels和textview都基于运行时的文本。因此,根据各个元素,我需要调整高度。所以我根据下面的编码计算了标

  • 如何自我调整uItableview单元格元素。 自动调整UITableViewCell大小。