{"id":2850,"url":"https://github.com/SwipeCellKit/SwipeCellKit","last_synced_at":"2025-08-06T16:32:11.906Z","repository":{"id":37664965,"uuid":"80831537","full_name":"SwipeCellKit/SwipeCellKit","owner":"SwipeCellKit","description":"Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift.","archived":false,"fork":false,"pushed_at":"2024-05-19T14:19:08.000Z","size":8356,"stargazers_count":6215,"open_issues_count":77,"forks_count":815,"subscribers_count":72,"default_branch":"develop","last_synced_at":"2024-12-02T22:09:46.467Z","etag":null,"topics":["drag","ios","swift","swipe","tableview","uikit","uitableview","uitableviewcell"],"latest_commit_sha":null,"homepage":"https://jerkoch.com/2017/02/07/swiper-no-swiping.html","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SwipeCellKit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2017-02-03T13:29:50.000Z","updated_at":"2024-12-02T13:11:05.000Z","dependencies_parsed_at":"2024-01-29T18:06:40.860Z","dependency_job_id":null,"html_url":"https://github.com/SwipeCellKit/SwipeCellKit","commit_stats":{"total_commits":249,"total_committers":24,"mean_commits":10.375,"dds":0.5301204819277108,"last_synced_commit":"6d632bdf1b7309505566b0248a00f61b67415a37"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwipeCellKit%2FSwipeCellKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwipeCellKit%2FSwipeCellKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwipeCellKit%2FSwipeCellKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SwipeCellKit%2FSwipeCellKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SwipeCellKit","download_url":"https://codeload.github.com/SwipeCellKit/SwipeCellKit/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228923747,"owners_count":17992573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["drag","ios","swift","swipe","tableview","uikit","uitableview","uitableviewcell"],"created_at":"2024-01-05T20:16:24.481Z","updated_at":"2024-12-09T16:31:17.045Z","avatar_url":"https://github.com/SwipeCellKit.png","language":"Swift","readme":"# SwipeCellKit\n\n[![Build Status](https://travis-ci.org/jerkoch/SwipeCellKit.svg)](https://travis-ci.org/jerkoch/SwipeCellKit) \n[![Version Status](https://img.shields.io/cocoapods/v/SwipeCellKit.svg)][podLink] \n[![Swift 5.0](https://img.shields.io/badge/Swift-5.0-orange.svg?style=flat)](https://developer.apple.com/swift/)\n[![license MIT](https://img.shields.io/cocoapods/l/SwipeCellKit.svg)][mitLink] \n[![Platform](https://img.shields.io/cocoapods/p/SwipeCellKit.svg)][docsLink] \n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Twitter](https://img.shields.io/badge/twitter-@mkurabi-blue.svg?style=flat)](https://twitter.com/mkurabi)\n\n*Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift.*\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Hero.gif\" /\u003e\u003c/p\u003e\n\n## About\n\nA swipeable `UITableViewCell` or `UICollectionViewCell` with support for:\n\n* Left and right swipe actions\n* Action buttons with: *text only, text + image, image only*\n* Haptic Feedback\n* Customizable transitions: *Border, Drag, and Reveal*\n* Customizable action button behavior during swipe\n* Animated expansion when dragging past threshold\n* Customizable expansion animations\n* Support for both `UITableView` and `UICollectionView`\n* Accessibility\n* Dark Mode\n\n## Background\n\nCheck out my [blog post](https://jerkoch.com/2017/02/07/swiper-no-swiping.html) on how *SwipeCellKit* came to be.\n\n## Demo\n\n### Transition Styles\n\nThe transition style describes how the action buttons are exposed during the swipe.\n\n#### Border \n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Transition-Border.gif\" /\u003e\u003c/p\u003e\n\n#### Drag \n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Transition-Drag.gif\" /\u003e\u003c/p\u003e\n\n#### Reveal \n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Transition-Reveal.gif\" /\u003e\u003c/p\u003e\n\n#### Customized\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Transition-Delegate.gif\" /\u003e\u003c/p\u003e\n\n### Expansion Styles\n\nThe expansion style describes the behavior when the cell is swiped past a defined threshold.\n\n#### None\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Expansion-None.gif\" /\u003e\u003c/p\u003e\n\n#### Selection\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Expansion-Selection.gif\" /\u003e\u003c/p\u003e\n\n#### Destructive\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Expansion-Destructive.gif\" /\u003e\u003c/p\u003e\n\n#### Customized\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/jerkoch/SwipeCellKit/develop/Screenshots/Expansion-Delegate.gif\" /\u003e\u003c/p\u003e\n\n## Requirements\n\n* Swift 5.0\n* Xcode 10.3+\n* iOS 9.0+\n\n## Installation\n\n#### [CocoaPods](http://cocoapods.org) (recommended)\n\n````ruby\nuse_frameworks!\n\n# Latest release in CocoaPods\npod 'SwipeCellKit'\n\n# Get the latest on develop\npod 'SwipeCellKit', :git =\u003e 'https://github.com/SwipeCellKit/SwipeCellKit.git', :branch =\u003e 'develop'\n\n# If you have NOT upgraded to Xcode 11, use the last Swift Xcode 10.X compatible release\npod 'SwipeCellKit', '2.6.0'\n\n# If you have NOT upgraded to Swift 5.0, use the last Swift 4.2/Xcode 10.2 compatible release\npod 'SwipeCellKit', '2.5.4'\n\n# If you have NOT upgraded to Swift 4.2, use the last non-swift 4.2 compatible release\npod 'SwipeCellKit', '2.4.3'\n````\n\n#### [Carthage](https://github.com/Carthage/Carthage)\n\n````bash\ngithub \"SwipeCellKit/SwipeCellKit\"\n````\n\n#### [Swift Package Manager](https://swift.org/package-manager/)\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/SwipeCellKit/SwipeCellKit\", from: \"2.7.1\")\n]\n```\n\n## Documentation\n\nRead the [docs][docsLink]. Generated with [jazzy](https://github.com/realm/jazzy). Hosted by [GitHub Pages](https://pages.github.com).\n\n## Usage for UITableView\n\nSet the `delegate` property on `SwipeTableViewCell`:\n\n````swift\noverride func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -\u003e UITableViewCell {\n    let cell = tableView.dequeueReusableCell(withIdentifier: \"Cell\") as! SwipeTableViewCell\n    cell.delegate = self\n    return cell\n}\n````\n\nAdopt the `SwipeTableViewCellDelegate` protocol:\n\n````swift\nfunc tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -\u003e [SwipeAction]? {\n    guard orientation == .right else { return nil }\n\n    let deleteAction = SwipeAction(style: .destructive, title: \"Delete\") { action, indexPath in\n        // handle action by updating model with deletion\n    }\n\n    // customize the action appearance\n    deleteAction.image = UIImage(named: \"delete\")\n\n    return [deleteAction]\n}\n````\n\nOptionally, you can implement the `editActionsOptionsForRowAt` method to customize the behavior of the swipe actions:\n\n````swift    \nfunc tableView(_ tableView: UITableView, editActionsOptionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -\u003e SwipeOptions {\n    var options = SwipeOptions()\n    options.expansionStyle = .destructive\n    options.transitionStyle = .border\n    return options\n}\n````\n## Usage for UICollectionView\n\nSet the `delegate` property on `SwipeCollectionViewCell`:\n\n````swift\noverride func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -\u003e UICollectionViewCell {\n    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: \"Cell\", for: indexPath) as! SwipeCollectionViewCell\n    cell.delegate = self\n    return cell\n}\n````\n\nAdopt the `SwipeCollectionViewCellDelegate` protocol:\n\n````swift\nfunc collectionView(_ collectionView: UICollectionView, editActionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -\u003e [SwipeAction]? {\n    guard orientation == .right else { return nil }\n\n    let deleteAction = SwipeAction(style: .destructive, title: \"Delete\") { action, indexPath in\n        // handle action by updating model with deletion\n    }\n\n    // customize the action appearance\n    deleteAction.image = UIImage(named: \"delete\")\n\n    return [deleteAction]\n}\n````\n\nOptionally, you can implement the `editActionsOptionsForItemAt` method to customize the behavior of the swipe actions:\n\n````swift    \nfunc collectionView(_ collectionView: UICollectionView, editActionsOptionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -\u003e SwipeOptions {\n    var options = SwipeOptions()\n    options.expansionStyle = .destructive\n    options.transitionStyle = .border\n    return options\n}\n````\n### Transitions\n\nThree built-in transition styles are provided by `SwipeTransitionStyle`:  \n\n* .border: The visible action area is equally divide between all action buttons.\n* .drag: The visible action area is dragged, pinned to the cell, with each action button fully sized as it is exposed.\n* .reveal: The visible action area sits behind the cell, pinned to the edge of the table view, and is revealed as the cell is dragged aside.\n\nSee [Customizing Transitions](https://github.com/SwipeCellKit/SwipeCellKit/blob/develop/Guides/Advanced.md) for more details on customizing button appearance as the swipe is performed.\n\n#### Transition Delegate\n\nTransition for a `SwipeAction` can be observered by setting a `SwipeActionTransitioning` on the `transitionDelegate` property. This allows you to observe what percentage is visible and access to the underlying `UIButton` for that `SwipeAction`. \n\n### Expansion\n\nFour built-in expansion styles are provided by `SwipeExpansionStyle`:  \n\n* .selection\n* .destructive (like Mail.app)\n* .destructiveAfterFill (like Mailbox/Tweetbot)\n* .fill\n\nMuch effort has gone into making `SwipeExpansionStyle` extremely customizable. If these built-in styles do not meet your needs, see [Customizing Expansion](https://github.com/SwipeCellKit/SwipeCellKit/blob/develop/Guides/Advanced.md) for more details on creating custom styles.\n\nThe built-in `.fill` expansion style requires manual action fulfillment. This means your action handler must call `SwipeAction.fulfill(style:)` at some point during or after invocation to resolve the fill expansion. The supplied `ExpansionFulfillmentStyle` allows you to delete or reset the cell at some later point (possibly after further user interaction).\n\nThe built-in `.destructive`, and `.destructiveAfterFill` expansion styles are configured to automatically perform row deletion when the action handler is invoked (automatic fulfillment).  Your deletion behavior may require coordination with other row animations (eg. inside `beginUpdates` and `endUpdates`). In this case, you can easily create a custom `SwipeExpansionStyle` which requires manual fulfillment to trigger deletion:\n\n````swift\nvar options = SwipeTableOptions()\noptions.expansionStyle = .destructive(automaticallyDelete: false)\n````\n\n\u003e **NOTE**: You must call `SwipeAction.fulfill(with style:)` at some point while/after your action handler is invoked to trigger deletion. Do not call `deleteRows` directly.\n\n````swift\nlet delete = SwipeAction(style: .destructive, title: nil) { action, indexPath in\n    // Update model\n    self.emails.remove(at: indexPath.row)\n    action.fulfill(with: .delete)\n}\n````\n\n## Advanced \n\nSee the [Advanced Guide](https://github.com/SwipeCellKit/SwipeCellKit/blob/develop/Guides/Advanced.md) for more details on customization.\n\n## Credits\n\nMaintained by [**@mkurabi**](https://twitter.com/mkurabi).\n\n## Showcase\n\nWe're interested in knowing [who's using *SwipeCellKit*](https://github.com/SwipeCellKit/SwipeCellKit/blob/develop/SHOWCASE.md) in their app. Please submit a pull request to add your app! \n\n## License\n\n`SwipeCellKit` is released under an [MIT License][mitLink]. See `LICENSE` for details.\n\n*Please provide attribution, it is greatly appreciated.*\n\n[podLink]:https://cocoapods.org/pods/SwipeCellKit\n[docsLink]:https://swipecellkit.github.io/SwipeCellKit/\n[mitLink]:http://opensource.org/licenses/MIT\n","funding_links":[],"categories":["UI","Libs","TableView","UI/UX","Swift","Content","UI [🔝](#readme)"],"sub_categories":["Table View / Collection View","UI","Other free courses","Table View"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSwipeCellKit%2FSwipeCellKit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSwipeCellKit%2FSwipeCellKit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSwipeCellKit%2FSwipeCellKit/lists"}