πŸ” Awesome fully customize search view like Pinterest written in Swift 5.0 + Realm support!

Overview

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

Highlighter

Objectification

MotionBook

Author

younatics Twitter

License

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

Comments
  • Dependency

    Dependency "YNSearch" has no shared framework schemes

    I try to install the library through the Carthage, it's giving me below error

    *** Fetching YNSearch *** Checking out YNSearch at "0.2.1" *** xcodebuild output can be found in /var/folders/lf/13b1q2vd1892s9l8knv_m7nw0000gn/T/carthage-xcodebuild.VmVLpH.log *** Skipped building YNSearch due to the error: Dependency "YNSearch" has no shared framework schemes

    bug 
    opened by neha275 7
  • Easy way to customise cells?

    Easy way to customise cells?

    Great project, thank you for sharing!

    I am curious if there is an easy way to be able to customise the look and feel of our cells, for example the result cells in YNSearchListViewCell.

    Also, if I want to add an additional field, such as a UILabel on the right of the cell (for example specifying the occurence of a particular item), is there an easy way to do that in your library?

    Thanks again!

    enhancement 
    opened by spinach 6
  • How to show Navigationbar?

    How to show Navigationbar?

    Hi, I would rather like to have a navigationcontroller instead of a modal view for clicked items. How to make the navigationbar visible?

    Thanks and kind regards

    Edit: I found out that self.navigationController!.isNavigationBarHidden = false does the job, but then the textfield is hidden. How to put the textfield in front of the navigation bar?

    opened by MHX792 2
  • Clear history button and x button doesn't work if there are a lot of histories

    Clear history button and x button doesn't work if there are a lot of histories

    @younatics @controversial The clear history button only works if there are a few histories in the scroll view to the point where it fits inside the current view and the history table/scroll view does scroll. But once the tableview has enough histories to the point where the clear history button is not in the view then the clear history button doesn't work for some reason. Also the "x" button right beside each history doesn't work for same reason. If there are a little bit of history cells then the buttons work fine, but if there a lot then both buttons are disabled or don't work. Try it for yourself. Create a bunch of histories, probably 15-20 searches so you have 15-20 history cells and the buttons inside the history cell and clear history button wont work. Can you fix this as soon as possible. Im trying to roll out my app.

    bug 
    opened by Ahmedshubber 2
  • DemoSearchHistories only gets set after first search

    DemoSearchHistories only gets set after first search

    Hi,

    Firstly, great repo - its perfect for what I'm wanting to do!

    Secondly, I can't seem to get the demoSearchHistories array to appear on the initial load of the app - I can only get it to appear once I tap the search text field, then click cancel.

    I've tried putting the "ynSearch.setSearchHistories(value: demoSearchHistories)" into a viewDidAppear() class, but no luck. It appears to be the same issue with the demo repo as well.

    Thanks!

    opened by edgeofchaos2005 2
  • Search Button Click, how to track?

    Search Button Click, how to track?

    Hi, I see delegates for history clicked, category clicked and listview clicked. But don't see a way to track search button clicked?

    Use case: My search string does not match with anything in database. But I want to get the search string in the program once the search button is clicked.

    opened by deshan 1
  • Pinterest Home grid

    Pinterest Home grid

    Hi

    Nice work. Quick question. Does your version have the same Pinterest Home VC that displays the search results in a vertical scrolling grid? From the screenshot it looks like your search results are presented as single boards instead of a two-image wide Pinterest-like grid. Thanks

    opened by tysun 1
  • Fix typo : serach to search

    Fix typo : serach to search

    history view ν•˜λ‹¨ 뢀에 Clear search historyκ°€ μ•„λ‹ˆλΌ Clear serach history 둜 λ‚˜μ™€μ„œ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.

    Fixed Typo under history view, which says "serach" not "search"

    opened by JuneBuug 1
  • [OPTIMIZE] better UI/UX experience

    [OPTIMIZE] better UI/UX experience

    Hi, Using your repository, There should be some situation where a user wants to simply clear text. By doing this code, user can do this. So, I added it (actually this is way I customize and use this in my project)

    I guess it may be better UI/UX.(Otherwise, it's okay.)

    Anyway, Thank for your repository. I use this in very useful way.

    opened by boraseoksoon 1
  • Text Field Did Begin editing

    Text Field Did Begin editing

    I am trying to get Character enter in Search bar. When I use textField Did begin Editing it overrides the other Delegate and not work properly. I am sending the Single text enter by user to API for getting response and then sending new data. Also how to add navigation bar with search bar, if I unhide navigatio bar search bar disappears. I have earlier solution but not worked

    opened by gaus55 0
  • Clearing history is not working

    Clearing history is not working

    @younatics For some reason, clearing history is not working. I tried debugging it for hours and realized the button wasn't enabled if the clear history button y value was past the height of the screen. Could I send you my project and could you please take a look at it. Thanks. Great project by the way.

    opened by Ahmedshubber 2
Releases(2.4.0)
πŸš€ Elegant Pager View fully written in pure SwiftUI.

PagerTabStripView Made with ❀️ by Xmartlabs team. XLPagerTabStrip for SwiftUI! Introduction PagerTabStripView is the first pager view built in pure Sw

xmartlabs 482 Jan 9, 2023
Fully customizable Facebook reactions like control

Reactions is a fully customizable control to give people more ways to share their reaction in a quick and easy way. Requirements β€’ Usage β€’ Installatio

Yannick Loriot 585 Dec 28, 2022
List tree data souce to display hierachical data structures in lists-like way. It's UI agnostic, just like view-model and doesn't depend on UI framework

SwiftListTreeDataSource List tree data souce to display hierachical data structures in lists-like way. It's UI agnostic, just like view-model, so can

Dzmitry Antonenka 26 Nov 26, 2022
TSnackBarView is a simple and flexible UI component fully written in Swift

TSnackBarView is a simple and flexible UI component fully written in Swift. TSnackBarView helps you to show snackbar easily with 3 styles: normal, successful and error

Nguyen Duc Thinh 3 Aug 22, 2022
TDetailBoxView is a simple and flexible UI component fully written in Swift

TDetailBoxView is a simple and flexible UI component fully written in Swift. TDetailBoxView is developed to help users quickly display the detail screen without having to develop from scratch.

Nguyen Duc Thinh 2 Aug 18, 2022
TSwitchLabel is a simple and flexible UI component fully written in Swift.

TSwitchLabel is a simple and flexible UI component fully written in Swift. TSwitchLabel is developed for you to easily use when you need to design a UI with Label and Switch in the fastest way without having to spend time on develop from scratch.

Nguyen Duc Thinh 2 Aug 18, 2022
A beautiful radar view to show nearby items (users, restaurants, ...) with ripple animation, fully customizable

HGRippleRadarView Example To run the example project, clone the repo, and run pod install from the Example directory first. This project is inspired b

Hamza Ghazouani 352 Dec 4, 2022
SAHistoryNavigationViewController realizes iOS task manager like UI in UINavigationContoller. Support 3D Touch!

SAHistoryNavigationViewController Support 3D Touch for iOS9!! SAHistoryNavigationViewController realizes iOS task manager like UI in UINavigationConto

Taiki Suzuki 1.6k Dec 29, 2022
Super awesome Swift minion for Core Data (iOS, macOS, tvOS)

⚠️ Since this repository is going to be archived soon, I suggest migrating to NSPersistentContainer instead (available since iOS 10). For other conven

Marko Tadić 306 Sep 23, 2022
A collection of awesome loading animations

NVActivityIndicatorView ⚠️ Check out LoaderUI (ready to use with Swift Package Mananger supported) for SwiftUI implementation of this. ?? Introduction

Vinh Nguyen 10.3k Dec 27, 2022
Reel Search is a Swift UI controller that allows you to choose options from a list

REEL SEARCH Reel Search is a Swift UI controller that allows you to choose options from a list We specialize in the designing and coding of custom UI

Ramotion 2.5k Dec 21, 2022
⚑️ A library of widgets and helpers to build instant-search applications on iOS.

By Algolia. InstantSearch family: InstantSearch iOS | InstantSearch Android | React InstantSearch | InstantSearch.js | Angular InstantSearch | Vue Ins

Algolia 567 Dec 20, 2022
Search jailbreak packages using the Tweakio API, Parcility API or Canister API straight from Cydia, Installer, Sileo and Zebra!

Tweakio Search packages globally directly from your favourite package manager! Works with Cydia, Installer, Zebra and Sileo! How does it work The twea

null 17 Jan 1, 2023
App that uses iTunes Search API with SwiftUI for iOS 15+

ItunesSearchApp App that uses iTunes Search API with SwiftUI for iOS 15+ Documentation iTunes Search API: https://developer.apple.com/library/archive/

Karin Prater 22 Dec 25, 2022
A UITextView subclass that adds support for multiline placeholder written in Swift.

KMPlaceholderTextView A UITextView subclass that adds support for multiline placeholder written in Swift. Usage You can set the value of the placehold

Zhouqi Mo 794 Jan 7, 2023
A custom stretchable header view for UIScrollView or any its subclasses with UIActivityIndicatorView and iPhone X safe area support for content reloading. Built for iOS 10 and later.

Arale A custom stretchable header view for UIScrollView or any its subclasses with UIActivityIndicatorView support for reloading your content. Built f

Putra Z. 43 Feb 4, 2022
Full configurable spreadsheet view user interfaces for iOS applications. With this framework, you can easily create complex layouts like schedule, gantt chart or timetable as if you are using Excel.

kishikawakatsumi/SpreadsheetView has moved! It is being actively maintained at bannzai/SpreadsheetView. This fork was created when the project was mov

Kishikawa Katsumi 34 Sep 26, 2022
An UITextView in Swift. Support auto growing, placeholder and length limit.

GrowingTextView Requirements iOS 8.0 or above Installation CocoaPods GrowingTextView is available through CocoaPods. To install it, simply add the fol

Kenneth Tsang 941 Jan 5, 2023