• Stars
    star
    1,192
  • Rank 39,244 (Top 0.8 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🔍 Awesome fully customize search view like Pinterest written in Swift 5.0 + Realm support!

YNSearch + Realm Support

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

Updates

See CHANGELOG for details

Intoduction

🔍 Awesome search view, written in Swift 5.0, appears search view like Pinterest Search view. You can fully customize this library. You can also use this library with Realm! See usage in below

See Highlighter for highlight search result

demo2 demo demo3 demo4

Requirements

YNSearch is written in Swift 5.0. Compatible with iOS 8.0+

Installation

Cocoapods

YNSearch is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'YNSearch'

Carthage

github "younatics/YNSearch"

Simple Usage

Set categories (required) and search histories (optional)

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()

Set database (required) and key (required). key will be displayed in YNSearchListView You can set your database [Any] if you want to customize.

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

Set YNSearchListView Delegate

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 Usage

Get your Data with Realm

let datas = realm.objects(RealmModel.self)

Realm is not collection type so you need to convert it again with [Any]type. This will find all string in your RealmModel and show you results.

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)

I used Objectification for accurate search result. This library will get all data in your object and search if for us.

Done!

View Hierachy

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

Custom Usage

set YNSearchDelegate if you want callback

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)
}

Set YNCategoryButton type.

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

See more usage in demo

You can fully customize this YNSearch based on view hierachy

References

Please tell me or make pull request if you use this library in your application :)

Author

younatics Twitter

License

YNSearch is available under the MIT license. See the LICENSE file for more info.

More Repositories

1

MotionBook

📖 Awesome iOS UI/UX Application (Open Source)
Swift
1,475
star
2

YNDropDownMenu

✨ Awesome Dropdown menu for iOS with Swift 5.0
Swift
1,345
star
3

Highlighter

🖍 Highlight whatever you want!
Swift
933
star
4

ExpandableCell

✨ Awesome expandable, collapsible tableview cell for iOS written in Swift 5
Swift
770
star
5

MediaBrowser

🏞 A simple iOS photo and video browser with optional grid view, captions and selections written in Swift5.0
Swift
649
star
6

YNExpandableCell

✨ Awesome expandable, collapsible tableview cell for iOS written in Swift 4
Swift
454
star
7

Dismissable

⚡️Dismissable is super convenient to dismiss with gesture!
Swift
304
star
8

Triangulation

Triangulation effect in iOS
Swift
174
star
9

PowerMode

🎶 PowerMode in iOS!
Swift
169
star
10

MotionBook-Source

Official MotionBook Source Code
Swift
152
star
11

Toggler

💡 Don't further use 'isSelected' to every button. use 'Toggler' to simply control your buttons
Swift
104
star
12

React-Native-Integration-with-existing-app

React Native Integration with existing app
53
star
13

PickColor

📌 Pick color in image, make placeholder color like Pinterest!
Swift
53
star
14

DeepLearningToMobile

Curated way to convert deep learning model to mobile⚡️
Jupyter Notebook
50
star
15

AppUpdater

❗️Check your update and show alert with one line of code
Swift
49
star
16

Collection-Data-Structures-Swift-KR

Swift Data Structure를 소개합니다.
Swift
46
star
17

fastlane-ios-example

Fastlane iOS Example for Beta, Release
Ruby
37
star
18

Stringfication

🔨 Make all objects to String!
Swift
33
star
19

Objectification

🔍 Return objects where string is contained in object! (useful with Search)
Swift
21
star
20

Shader

🌃 Make simple shade view with Shader!
Swift
16
star
21

GirlFriend

Prevent 404
12
star
22

NumiOS

⚡️Numpy in iOS
Swift
9
star
23

AI-in-iOS

AI in iOS
6
star
24

younatics.github.io

younatics.github.io
HTML
5
star
25

avplayer-sample

Swift
4
star
26

GWExtensions

Extensions of iOS Develop
Shell
3
star
27

opensource-test

Test for opensource
Swift
2
star
28

algorithm

Swift
2
star
29

Apple_Korean_keyboard_bug_report

Objective-C
2
star
30

Using-Realm-in-MotionBook

Using Realm in MotionBook
1
star
31

React-Native-Review-KR

리액트 네이티브를 사용한 후기를 공유합니다.
1
star
32

FilterChart

Filter Chart for iOS
Swift
1
star