YNSearch 2.4.0

YNSearch 2.4.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2019年3月
SPM支持 SPM

[younatics] 维护。




YNSearch 2.4.0

  • 作者:
  • Seungyoun Yi

YNSearch + Realm 支持

Awesome Version Carthage Compatible License: MIT Build Status Platform Swift 5.0

更新

详情请见 变更日志

简介

🔍一款令人惊叹的搜索视图,用 Swift 5.0 编写,类似于 Pinterest 搜索视图。您可以完全自定义这个库。您还可以使用这个库与 Realm 一起使用!以下是一些用法示例

请参阅 Highlighter 了解如何突出显示搜索结果

demo2 demo demo3 demo4

需求

YNSearch是用Swift 5.0编写的。支持iOS 8.0及以上版本。

安装

CocoaPods

YNSearch通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中

pod 'YNSearch'

Carthage

github "younatics/YNSearch"

简单用法

设置分类(必填)和搜索历史(可选)

import YNSearch

let demoDatabase = ["Menu", "Animation", "Transition", "TableView", "CollectionView", "Indicator", "Alert", "UIView", "UITextfield", "UITableView", "Swift", "iOS", "Android"]

ynSearch.setCategories(value: demoDatabase)
ynSearch.setSearchHistories(value: demoDatabase)

self.ynSearchinit()

设置数据库(必填)和键(必填)。键将在YNSearchListView中显示,如果您想自定义,可以设置您的数据库为[Any]

let database1 = YNDropDownMenu(key: "YNDropDownMenu")
let database2 = YNSearchData(key: "YNSearchData")
let demoDatabase = [database1, database2]
        
self.initData(database: demoDatabase)

设置YNSearchListView代理

func ynSearchListView(_ ynSearchListView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = self.ynSearchView.ynSearchListView.dequeueReusableCell(withIdentifier: YNSearchListViewCell.ID) as! YNSearchListViewCell
        if let ynmodel = self.ynSearchView.ynSearchListView.searchResultDatabase[indexPath.row] as? YNSearchModel {
            cell.searchLabel.text = ynmodel.key
        }
        
        return cell
}
    
func ynSearchListView(_ ynSearchListView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let ynmodel = self.ynSearchView.ynSearchListView.searchResultDatabase[indexPath.row] as? YNSearchModel, let key = ynmodel.key {
        // Call listview clicked based on key
        self.ynSearchView.ynSearchListView.ynSearchListViewDelegate?.ynSearchListViewClicked(key: key)
        
        // return object you set in database
        self.ynSearchView.ynSearchListView.ynSearchListViewDelegate?.ynSearchListViewClicked(object: self.ynSearchView.ynSearchListView.database[indexPath.row])
        
        // Append Search history
        self.ynSearchView.ynSearchListView.ynSearch.appendSearchHistories(value: key)
        }
}

使用Realm

使用Realm获取您的数据

let datas = realm.objects(RealmModel.self)

Realm不是集合类型,因此您需要用[Any]类型再次转换它。这将找到您的RealmModel中的所有字符串并显示结果。

var dataArray = [Any]()
for data in datas {
        let searchModel = RealmModel()
            searchModel.author = data.author
            searchModel.detail = data.detail
            searchModel.title = data.title
            searchModel.type = data.type
            
            dataArray.append(searchModel)
        }
        
self.initData(database: dataArray)

我使用了 Objectification 用于准确搜索结果。此库将获取你的对象中所有数据并为我们进行搜索。

已完成!

查看层次结构

YNSearchViewController: Inherit this viewcontroller 
|-- YNSearchTextFieldView: YNSearchTextField with cancel button
|   |-- YNSearchTextField: Search UITextfield
|   |-- cancelButton: Show when YNSearchTextField textFieldDidBeginEditing
|
|-- YNSearchView : get both YNSearchMainView and YNSearchListView
|   |-- YNSearchMainView: First view that you can see
|   |   |-- categoryLabel: Cateogry label
|   |   |-- [YNCategoryButton]: cateogory buttons
|   |   |-- searchHistoryLabel: Search history label
|   |   |-- [YNSearchHistoryView]: history views
|   |   |   |-- [YNSearchHistoryButton]: Search history button
|   |   |   |-- [closeButton]: Close button
|   |
|   |-- YNSearchListView: UITableview with search result

自定义使用方法

如果你想要回调,请设置 YNSearchDelegate

self.delegate = self

func ynSearchHistoryButtonClicked(text: String) {
  print(text)
}
    
func ynCategoryButtonClicked(text: String) {
  print(text)
}
    
func ynSearchListViewClicked(text: String) {
  print(text)
}

func ynSearchListViewClicked(object: YNSearchModel) {
  print(object)
}

设置 YNCategoryButton 类型。

self.ynSearchView.ynSearchMainView.setYNCategoryButtonType(type: .colorful)

在示例中查看更多使用方法

你可以根据视图层次结构完全自定义此 YNSearch

参考

如果你在使用此库,请告诉我或发起拉取请求 :)

Highlighter

Objectification

MotionBook

作者

younatics Twitter

许可

YNSearch 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。