πŸ” 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)
Simple and highly customizable iOS tag list view, in Swift.

TagListView Simple and highly customizable iOS tag list view, in Swift. Supports Storyboard, Auto Layout, and @IBDesignable. Usage The most convenient

Ela Workshop 2.5k Dec 28, 2022
Simple and highly customizable iOS tag list view, in Swift.

TagListView Simple and highly customizable iOS tag list view, in Swift. Supports Storyboard, Auto Layout, and @IBDesignable. Usage The most convenient

Ela Workshop 2.5k Dec 31, 2022
TagsGridView: A simple view for your tags

TagsGridView: A simple view for your tags. Requirements Installation Contents License Support Credits Requirements iOS 14, macOS 10.15 Swift 5.5 Xcode

Alex 5 Nov 4, 2021
This pod provides a view controller for choosing and creating tags in the style of wordpress or tumblr.

PARTagPicker This pod provides a view controller for choosing and creating tags in the style of wordpress or tumblr. This tag picker was originally us

Paul Rolfe 370 Nov 17, 2022
Highly customizable iOS tags view [input, edit, dynamic, tag, token, field, NSTokenField]

RKTagsView Highly customizable iOS tags view (like NSTokenField). Supports horizontal and vertical direction, editing, multiple selection, Auto Layout

Roman Kulesha 450 Oct 2, 2022
Made in Swift - Tag layout for UICollectionView supporting 3 types of alignments - Left || Centre || Right

TagCellLayout About Its an ui-collection-view LAYOUT class that takes care of all the logic behind making tags like layout using UICollectionView. It

Ritesh Gupta 346 Jan 1, 2023
Swift plugin which allow add mask to input field

AKMaskField AKMaskField is UITextField subclass which allows enter data in the fixed quantity and in the certain format (credit cards, telephone numbe

Artem Krachulov 347 Jul 19, 2022
πŸ” Awesome fully customize search view like Pinterest written in Swift 5.0 + Realm support!

YNSearch + Realm Support Updates See CHANGELOG for details Intoduction ?? Awesome search view, written in Swift 5.0, appears search view like Pinteres

Kyle Yi 1.2k Dec 17, 2022
πŸ”₯ πŸ”₯ πŸ”₯Support for ORM operation,Customize the PQL syntax for quick queries,Support dynamic query,Secure thread protection mechanism,Support native operation,Support for XML configuration operations,Support compression, backup, porting MySQL, SQL Server operation,Support transaction operations.

?? ?? ??Support for ORM operation,Customize the PQL syntax for quick queries,Support dynamic query,Secure thread protection mechanism,Support native operation,Support for XML configuration operations,Support compression, backup, porting MySQL, SQL Server operation,Support transaction operations.

null 60 Dec 12, 2022
Realm RxSwift - This application was written in order to use Realm, RxSwift frameworks in real example

Realm_RxSwift This simple app was written to introduce basic operations of some

Elbek Khasanov 3 Apr 7, 2022
Safari Web Extension to customize your search engine.

Safari Web Extension to customize your search engine. Search queries made from the Safari address bar are appended to the custom search engine URL. No

Marvin HΓ€user 3 Nov 16, 2022
A Pinterest-like segment control with masking animation.

PinterestSegment A Pinterest-like segment control with masking animation. Requirements iOS 8.0+ Xcode 9.0 Swift 4.0 Installation CocoaPods You can use

TBXark 672 Dec 20, 2022
The waterfall (i.e., Pinterest-like) layout for UICollectionView.

CHTCollectionViewWaterfallLayout CHTCollectionViewWaterfallLayout is a subclass of UICollectionViewLayout, and it trys to imitate UICollectionViewFlow

Nelson 4.4k Dec 24, 2022
SwiftUI views that arrange their children in a Pinterest-like layout

SwiftUI Masonry SwiftUI views that arrange their children in a Pinterest-like layout. HMasonry A view that arranges its children in a horizontal mason

Ciaran O'Brien 88 Dec 27, 2022
iOS video player for trailer. You can customize layout for the control panel. Support PiP and DRM.

iOS video player for trailer. You can customize layout for the control panel. Support PiP and DRM.

Abe Wang 11 Nov 7, 2022
WLEmptyState is an iOS based component that lets you customize the view when the dataset of a UITableView or a UICollectionView is empty.

Table of Content Overview Running an Example Project Installing WLEmptyState Configuring WLEmptyState Using WLEmptyState Customizing WLEmptyState Cont

Wizeline 315 Dec 5, 2022
Another is a tweak written in Logos and Objective-C to customize Apple's voice assistant - Siri.

Preview On screeen: In reality: English: Another Allows you to customize Siri. Only for Jailbreak users. Compiling Theos is required to compile the pr

Matthew 3 May 5, 2022
This is a Swift based demo project to show how to make the transition Pinterest liked.

PinterestSwift Compatible with Xcode 11 / Swift 5.0 This is a Swift based demo project to show how to make the transition Pinterest 2.0+ liked. Refer

Nicholas Tau 1.9k Dec 20, 2022
A deep copy of Pinterest in Swift

Demo YouTube: Demo (2 minutes) δΌ˜ι…·οΌšhttp://v.youku.com/v_show/id_XMzE3OTc5NDY2MA==.html?spm=a2h3j.8428770.3416059.1 The app is actually smoother than sh

Andy Tong 73 Sep 14, 2022
πŸ₯ΊPinterest Layout Tutorial

PinterestTutorial-iOS ?? Pinterest Layout Tutorial 이미지 크기에 λ”°λΌμ„œ λ™μ μœΌλ‘œ μ…€μ˜ λ ˆμ΄μ•„μ›ƒμ„ μ„€μ •ν•˜λŠ” ν•€ν„°λ ˆμŠ€νŠΈ λ ˆμ΄μ•„μ›ƒ κ΅¬ν˜„ν•΄ λ³΄μ•˜λ‹€. μ™„μ„± μ½”λ“œ UICollectionViewDelegateFlowLayout 의 μ„œλΈŒν΄λž˜μŠ€

Hyungyu Kim 6 May 10, 2022