Giter Site home page Giter Site logo

younatics / ynsearch Goto Github PK

View Code? Open in Web Editor NEW
1.2K 25.0 104.0 6.23 MB

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

Home Page: https://www.cocoacontrols.com/controls/ynsearch

License: MIT License

Swift 95.93% Ruby 2.92% Objective-C 1.15%
swift search searchbar ios pinterest realm realmswift

ynsearch's Introduction

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.

ynsearch's People

Contributors

aasatt avatar boraseoksoon avatar controversial avatar junebuug avatar younatics avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ynsearch's Issues

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.

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

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!

Swift 4 Support

Please provide support for Swift 4 as after upgrading to Swift 4 the library is not compiling.

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?

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!

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

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

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.

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.