Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift.

Overview

SwipeCellKit

Build Status Version Status Swift 5.0 license MIT Platform Carthage compatible Twitter

Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift.

About

A swipeable UITableViewCell or UICollectionViewCell with support for:

  • Left and right swipe actions
  • Action buttons with: text only, text + image, image only
  • Haptic Feedback
  • Customizable transitions: Border, Drag, and Reveal
  • Customizable action button behavior during swipe
  • Animated expansion when dragging past threshold
  • Customizable expansion animations
  • Support for both UITableView and UICollectionView
  • Accessibility
  • Dark Mode

Background

Check out my blog post on how SwipeCellKit came to be.

Demo

Transition Styles

The transition style describes how the action buttons are exposed during the swipe.

Border

Drag

Reveal

Customized

Expansion Styles

The expansion style describes the behavior when the cell is swiped past a defined threshold.

None

Selection

Destructive

Customized

Requirements

  • Swift 5.0
  • Xcode 10.3+
  • iOS 9.0+

Installation

CocoaPods (recommended)

use_frameworks!

# Latest release in CocoaPods
pod 'SwipeCellKit'

# Get the latest on develop
pod 'SwipeCellKit', :git => 'https://github.com/SwipeCellKit/SwipeCellKit.git', :branch => 'develop'

# If you have NOT upgraded to Xcode 11, use the last Swift Xcode 10.X compatible release
pod 'SwipeCellKit', '2.6.0'

# If you have NOT upgraded to Swift 5.0, use the last Swift 4.2/Xcode 10.2 compatible release
pod 'SwipeCellKit', '2.5.4'

# If you have NOT upgraded to Swift 4.2, use the last non-swift 4.2 compatible release
pod 'SwipeCellKit', '2.4.3'

Carthage

github "SwipeCellKit/SwipeCellKit"

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/SwipeCellKit/SwipeCellKit", from: "2.7.1")
]

Documentation

Read the docs. Generated with jazzy. Hosted by GitHub Pages.

Usage for UITableView

Set the delegate property on SwipeTableViewCell:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! SwipeTableViewCell
    cell.delegate = self
    return cell
}

Adopt the SwipeTableViewCellDelegate protocol:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
    guard orientation == .right else { return nil }

    let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
        // handle action by updating model with deletion
    }

    // customize the action appearance
    deleteAction.image = UIImage(named: "delete")

    return [deleteAction]
}

Optionally, you can implement the editActionsOptionsForRowAt method to customize the behavior of the swipe actions:

func tableView(_ tableView: UITableView, editActionsOptionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeOptions {
    var options = SwipeOptions()
    options.expansionStyle = .destructive
    options.transitionStyle = .border
    return options
}

Usage for UICollectionView

Set the delegate property on SwipeCollectionViewCell:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! SwipeCollectionViewCell
    cell.delegate = self
    return cell
}

Adopt the SwipeCollectionViewCellDelegate protocol:

func collectionView(_ collectionView: UICollectionView, editActionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
    guard orientation == .right else { return nil }

    let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
        // handle action by updating model with deletion
    }

    // customize the action appearance
    deleteAction.image = UIImage(named: "delete")

    return [deleteAction]
}

Optionally, you can implement the editActionsOptionsForItemAt method to customize the behavior of the swipe actions:

func collectionView(_ collectionView: UICollectionView, editActionsOptionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeOptions {
    var options = SwipeOptions()
    options.expansionStyle = .destructive
    options.transitionStyle = .border
    return options
}

Transitions

Three built-in transition styles are provided by SwipeTransitionStyle:

  • .border: The visible action area is equally divide between all action buttons.
  • .drag: The visible action area is dragged, pinned to the cell, with each action button fully sized as it is exposed.
  • .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.

See Customizing Transitions for more details on customizing button appearance as the swipe is performed.

Transition Delegate

Transition 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.

Expansion

Four built-in expansion styles are provided by SwipeExpansionStyle:

  • .selection
  • .destructive (like Mail.app)
  • .destructiveAfterFill (like Mailbox/Tweetbot)
  • .fill

Much effort has gone into making SwipeExpansionStyle extremely customizable. If these built-in styles do not meet your needs, see Customizing Expansion for more details on creating custom styles.

The 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).

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

var options = SwipeTableOptions()
options.expansionStyle = .destructive(automaticallyDelete: false)

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.

let delete = SwipeAction(style: .destructive, title: nil) { action, indexPath in
    // Update model
    self.emails.remove(at: indexPath.row)
    action.fulfill(with: .delete)
}

Advanced

See the Advanced Guide for more details on customization.

Credits

Maintained by @mkurabi.

Showcase

We're interested in knowing who's using SwipeCellKit in their app. Please submit a pull request to add your app!

License

SwipeCellKit is released under an MIT License. See LICENSE for details.

Please provide attribution, it is greatly appreciated.

Comments
  • Fix issue with swiping collection view cells on iOS 13

    Fix issue with swiping collection view cells on iOS 13

    This PR contains fixes for swiping collection view cells on iOS 13. We found that by setting the cell itself as the action container view, following the table view cell's example, we were able to restore swiping behavior. Testing was done on a physical iOS 13 beta device and various iOS 12 simulators. No regressions were found using the demo app.

    opened by cfdrake 34
  • Changes to support allowing swipe cells and other gesture recognizers exclusively

    Changes to support allowing swipe cells and other gesture recognizers exclusively

    Recreating a pull request because the first was closed for lack of activity. We missed that (sorry), but have responded to questions. See previous request: #112

    opened by plivesey 23
  • UICollectionViewCell

    UICollectionViewCell

    Nice library when wanting more than possible with tableView(_:editActionsForRowAt:). Would it be possible to adopt this in order to work with UICollectionViewCell?

    enhancement help wanted 
    opened by fabb 23
  • iOS 11 cell interaction bug

    iOS 11 cell interaction bug

    I have an app which uses SwipeCell, it works perfectly fine on iOS 10 and earlier but while testing it simultaneously on iOS 11, the cell are interactiveness, didSelectRowAt and editActionsForRowAt are not getting called, however default cells are working properly and calling didSelectRowAt and editActionsForRowAt.

    a note to be made is that calling cell.showSwipe(orientation: .left, animated: true, completion: nil) and cell.hideSwipe(animated: true)

    It is unclear to me as of yet if this is a bug within the SwipeCellKit or iOS 11 but I will dig and report any findings... just thought to give you guys a heads up so that you are aware of this.

    opened by MouMentos 19
  • Vertical centring (Fix issue #149)

    Vertical centring (Fix issue #149)

    This PR adds the ability to keep the title and image centred vertically at all times. As I mentioned in the issue (#149), this is useful when you have very tall table view cells that are not entirely visible for a lot of the time (eg. when viewing a chain of emails in Mail.app).

    Below is a screenshot of the example app (with row height modified) before (left) and after (right) to illustrate these changes: screen shot 2018-04-02 at 7 04 20 pm

    To enable this feature you have to implement func visibleTableViewRect() -> CGRect in the cell's delegate. There is a default implementation in an extension of the delegate so existing users of SwipeCellKit would not experience a change in behaviour with their existing code. I did not use the weak reference to the table view that already exists in the SwipeTableViewCell class to get this rect because the new delegate function allows users to account for navigation bars/toolbars/etc that may be covering parts of the table view.

    I did not add a new property to control this behaviour to the SwipeTableOptions, since I think that it could be confusing for a user to have to enable it in the options as well as by implementing the delegate function, however, I can change this if you disagree.

    The easiest way to see these changes in effect in the example app is by changing the table view's row height to 500 and implementing visibleTableViewRect() in the cell delegate. On iOS 11+, the simplest implementation would be:

    func visibleTableViewRect() -> CGRect {
         return tableView.safeAreaLayoutGuide.layoutFrame
    }
    

    Thanks, halleygen

    opened by halleygen 18
  • The action is sometimes not shown

    The action is sometimes not shown

    Everything you need can be understood from gif. bug

        func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
            guard orientation == .right else { return nil }
    
            let deleteAction = SwipeAction(style: .destructive, title: nil) { action, indexPath in
                // handle action by updating model with deletion
            }
    
            // customize the action appearance
            deleteAction.title = "Delete"
            deleteAction.image = #imageLiteral(resourceName: "trash")
    
            return [deleteAction]
        }
    
        func tableView(_ tableView: UITableView, editActionsOptionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeTableOptions {
    
            var options = SwipeTableOptions()
            options.expansionStyle = .destructive
            options.transitionStyle = .reveal
            options.backgroundColor = .red
            
            return options
        }
    

    This is somehow connected with re-use cell. The cell is loaded from .xib

    opened by SeRG1k17 15
  • Support for UICollectionView

    Support for UICollectionView

    #4

    Initial support for UICollectionView.

    Unfortunately, the fork here replaced support for UITableView with support for UICollectionView. This change adds support for UICollectionView.

    Basically, this just copies all the UITableView related code/classes/etc and makes UICollectionView equivalents. SwipeTableOptions.swift was renamed to SwipeOptions.swift since it isn't table specific in any way (as far as I can tell). There's a lot of duplicated code between the two implementations, it may be worth it to refactor this to reduce that where it makes sense.

    The example app was updated to add a UICollectionView example. The root VC is not a table view offering a choice between the TableView or CollectionView examples. The UICollectionView example was tweaked so it behaves more or less like a table view.

    opened by gcox 15
  • Invalid update: invalid number of rows in section 0

    Invalid update: invalid number of rows in section 0

    I got two SwipeActions in my cells one to delete and one to modify. The one to modify does perform a segue with a modal view and the one to delete does display a popup to make sure the user want to. Whichever SwipeAction I put first in the return value will make the app crash. But the second one will always works. So I don't think the problem is with my actions because they work if they're not on the right side of the swipeActions. I saw another ticket to which you answered see the example with Mails but there is no pop up from the first swipeAction it's on the first one.

    Here is the code : ` func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? { guard orientation == .right else { return nil }

        let edit = SwipeAction(style: .default, title: nil) {action,
            indexPath in
            self.modifyPatientView(patient: self.patients[indexPath.row])
        }
        edit.hidesWhenSelected = true
        configure(action: edit, with: .edit)
        
        let cell = tableView.cellForRow(at: indexPath) as! PatientTableViewCell
        let closure: (UIAlertAction) -> Void = { _ in cell.hideSwipe(animated: true) }
        let delete = SwipeAction(style: .default, title: nil) { action, indexPath in
            let alert = UIAlertController(title: "Suppression patient", message: "Êtes-vous sur de vouloir supprimer ce patient ?", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: closure))
            alert.addAction(UIAlertAction(title: "Annuler", style: .cancel, handler: nil))
            
            self.present(alert, animated: true, completion: nil)
        }
        configure(action: delete, with: .trash)
    
        return [delete, edit]
    }`
    

    On this case the delete button will make the app crash and if I return [edit,delete] then edit will crash.

    opened by Saursinet 14
  • left, I return nil, and the left will appear a blank.

    left, I return nil, and the left will appear a blank.

    The first, drag to left, the right actions will appear. The second, drag to right and the left will appear blank The third, when I stop drag, it will reset with an animation. But I tap the cell, the animation stop before completion. So that the left remain a blank.

    wechatimg2

    opened by daishuyi 14
  • iOS 9 support

    iOS 9 support

    Hello @jerkoch,

    I was using your library for a project and noticed that it was iOS 10 only. I've put together a rough iOS 9 implementation that will at least complete the pan gestures and handles wrapping iOS 10 required code in the appropriate #available statements.

    Please let me know if there is anything that I've missed or any improvements that I can make to have this pull request fit your needs.

    The main change is I've added an Animator protocol used by the SwipeTableViewCell explicitly. It has 2 implementations attached to it. One for completing the animations using the UIViewPropertyAnimator and another for completing animations using UIView animator for iOS versions less than 10.

    Thanks, DMCApps

    opened by DMCApps 14
  • Crash on Delete

    Crash on Delete

    In my project, I'm getting a crash when I try to delete an item. So I tried with your example with my configuration which is having number of section equals to emails.count and just one row in each section corresponding to the item. Of course I changed indexPath.row by indexPath.section in the right place.

    It is possible to delete a row in a section and if it's the last row, delete in the same time the section ?

    opened by grifas 13
  • Open swipe options on click on cell

    Open swipe options on click on cell

    Is there any way to open the swipe options of right swipe by clicking on the cell with keeping the existing behavior.

    Any help will appreciated. Thanks

    opened by mortuzahossain 0
  • Swipe to delete without SwipeAction

    Swipe to delete without SwipeAction

    Can I implement simple "swipe to delete" without adding any SwipeAction(or mb with clear background and title)? I just want to move cell at some point and delete without actions view appearing.

    opened by ikrachko 0
  • Does this library support MacOS?

    Does this library support MacOS?

    I implemented it easily on iOS, but the code doesn't work for mac. Am I doing something wrong or is it not supported yet?

    Here's my code:

      func collectionView(_ collectionView: UICollectionView, editActionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
            guard orientation == .left else { return nil }
            let item = fetchedResultsController.object(at: indexPath)
            let unreadAction = SwipeAction(style: .default, title: item.isUnread ? "Read" : "Unread") { action, indexPath in
                item.isUnread = !item.isUnread
            }
            unreadAction.backgroundColor = .clear
            unreadAction.textColor = .bookmark01
            unreadAction.image = item.isUnread ? UIImage(named: "read") : UIImage(named: "unread")
            return [unreadAction]
        }
        
        func collectionView(_ collectionView: UICollectionView, editActionsOptionsForItemAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeOptions {
            var options = SwipeOptions()
            options.expansionStyle = .selection
            options.transitionStyle = .border
            options.backgroundColor = .clear
            return options
        }
    
    opened by jadebowl 0
  • Set target state after animation.

    Set target state after animation.

    Delay setting the target state until after the animation has completed.

    To be honest, I forget what bug this was fixing as I actually wrote this a few years ago.

    opened by peterkovacs 0
  • Not able to place Buttons vertically

    Not able to place Buttons vertically

    Hello, Is there any solution available for placing buttons vertically same like below image Screenshot 2022-03-21 at 4 53 43 PM

    Let me know in case of any solution found. Thank you in advance.

    opened by Khushali-Capermint 0
Releases(2.7.1)
  • 2.7.1(Sep 24, 2019)

  • 2.7.0(Sep 13, 2019)

    Added

    • Support for updated SPM (Swift Package Manager) for Xcode 11+ (#325)
    • Support for iOS 13 Dark Mode (#337)

    Fixed

    • Fixed hit test issue related to hidden cells (#314)
    • Fixed cell reuse layout issue (#335)
    • Fixed issue where a deleted cell that was being cell reused has the contentView offset incorrectly. (#355)
    • Fixed issue where on iOS 13 UICollectionViewCell does not perform swipe animation. (#333)
    Source code(tar.gz)
    Source code(zip)
  • 2.6.0(Sep 13, 2019)

  • 2.5.4(Mar 27, 2019)

  • 2.5.2(Mar 26, 2019)

  • 2.5.1(Dec 13, 2018)

  • 2.5.0(Sep 14, 2018)

  • 2.4.3(Jun 19, 2018)

  • 2.4.2(Jun 7, 2018)

    Fixed

    • Fix swipe action position when rotating a UITableView/UICollectionView with safe area insets.
    • Fix issue where gesture cancellation causes swipe cell to remain in dragging state in a non-left, right or centre x position.
    • Fix issue where expansion may trigger when swiping in the expansion zone very quickly.
    Source code(tar.gz)
    Source code(zip)
  • 2.4.1(May 30, 2018)

  • 2.4.0(May 28, 2018)

  • 2.3.2(May 21, 2018)

  • 2.3.1(May 18, 2018)

  • 2.3.0(May 18, 2018)

    Added

    • Support for vertically centered swipe actions for tall cells. (#186)

    Fixed

    • Resolved issue where touching cell in swipe expantion zone resulted in immediate cell expansion (#194)
    • Reselect swipped cell if it was previously selected (#58)
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(Apr 11, 2018)

    Added

    • Swift 4.1 Support. (#181)
    • Allow mix use of only image or text label actions. (#139)

    Fixed

    • Fix issue where multiple SwipeTableViewCells can be swipped simultaneously. (#57)
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Mar 19, 2018)

    Added

    • Add support for safeAreaInsets (i.e. iPhone X) (#159, #119)

    Fixed

    • Update README to fix an error with how to fulfill a delete row operation
    • Fix crash related to UIAccessablilityCustomAction if no accessability text is set on action image, or action label. (#156)
    • Fix issue where SwipeActionButton.maximumButtonWidth is not respected when its value is below the default/computed minimumButtonWidth (#150)
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Dec 28, 2017)

  • 2.0.0(Oct 6, 2017)

    Added

    • Add Swift 4 support
    • New highlightedTextColor property on SwipeAction. (#88)

    Fixed

    • Fix issue where swipe actions intermittently were not displayed when cell is swiped. (#85)
    Source code(tar.gz)
    Source code(zip)
  • 1.9.1(Oct 6, 2017)

    Fixed

    • Fix issue related to pixel misalignment for action buttons. (#50)
    • Fix crash on iOS 10.0.0 where UIFeedbackGenerator crashed on non-haptic supported devices. (#51)
    • Fix issue related to iOS 11. SwipeCellKit was inadvertently enabling/disabling various gestures on UITableView, including system level ones in hopes of disabling 3D Touch on swiped UITableViewCells. Developers must now handle the disabling/enabling of 3D touch when cell is swiped with the aid of SwipeTableViewCellDelegate. (#48)
    Source code(tar.gz)
    Source code(zip)
  • 1.9.0(Jun 17, 2017)

    Added

    • Added highlighted background color for action button. (#52)

    Fixed

    • Correctly setting the parents project to support iOS 9.0+. (#40)
    • Fix issue where using non-SwipeTableViewCell within a UITableView interfered with didSelectRowAtIndexPath. This was caused by the assumption all cells in a UITableView extend SwipeTableViewCell. (#37) (#43)
    • Add protection against superview in point(inside:) being nil and crashing. (#46)
    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(Apr 17, 2017)

    Added

    • New targetOverscrollElasticity property in SwipeExpansionStyle to support customization of elasticity when dragging past the expansion target. (#30)
    • New swipeOffset property and setSwipeOffset(_:animated:completion:) in SwipeTableViewCell to support programmatically setting the swipe offset. (#19)
    • Add support for relayout of action buttons if cell frame changes while swiped (ie. rotation/tableview resizing). Now that active/swiped SwipeTableViewCells no longer reset to center when the parent UITableView performs layout (#28), better support for UITableView frame/bounds changes are required. The UITableView frame/bounds may change during rotation or whenever its parent view frame changes. The SwipeActionsView was already using auto layout to resize appropriately, but its button (and wrapper) subviews were using constraints derived from the default autoresizingMask. This change ensures the SwipeActionButtonWrapperView flexes with its parent SwipeActionsView, and button subviews pin to the appropriate left/right side of their wrapper view depending on orientation.

    Fixed

    • Fix issue where mask was not removed when using .reset style action fulfillment. (#27)
    • Fix to adjust the cell's new frame origin x value when it's already active. This ensures a swiped cell is not reset to center whenever the UITableView performs layout on it's cell subviews.
    Source code(tar.gz)
    Source code(zip)
  • 1.7.0(Apr 1, 2017)

    Added

    • Support for iOS 9. Thanks to @DMCApps!
    • Showcase link in the README to track apps using the framework. Please submit a pull request to add your app!

    Updated

    • The Advanced Customization section in the README and moved it to a separate file.
    • The Requirements section in the README to reflect iOS 9 support.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Mar 29, 2017)

  • 1.6.0(Mar 28, 2017)

    Added

    • Fully customizable expansion styles. See README documentation for more details. (#14)
    • SwipeTableViewDelegate delegate methods for willBeginEditingRowAt and didEndEditingRowAt. (#18)

    Fixed

    • Removed action view cleanup when cell moved moved off UIWindow. Initially, this was added to prevent retain cycles caused by SwipeAction handlers capturing self. Instead, it should be left up to the implementor to use [weak self] in handler implementations or ensure the action view is hidden before dismissing/popping a temporary parent view controller. I've verified this behaves the same way as UITableViewRowAction. (#23)
    • Issue where the table view pan gesture was being disabled along with all other table view gestures when a cell was swiped. (#21)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.0(Mar 14, 2017)

    Fixed

    • Issue where the destructive action animation relied on the table view to animate covering the deleted cell with the cells below it in order for its height to appear to shrink. If the cell being deleted was the last row, or the remaining cells below were not tall enough, the height of the deleted cell would not appear to shrink. Fixed by adding a mask to cell and animate its height to zero. (#15)
    • Missing call to super.didMoveToSuperview causing accessory taps to be ignored. (#16)
    • The previous action button textColor fix to re-add also setting the tint color to the text color. The tint color effects button images rendered as template images.

    Added

    • Ability to programmatically show swipe actions. (#13)
    • Support for action background effect. (#10)
    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Mar 7, 2017)

    Fixed

    • The expansion threshold for selection-style was always 50% of the screen width regardless of if the action view width was larger.
    • Issue where the textColor property in SwipeAction was not being applied.

    Added

    • Accessibility support. (#5)
    • New expansionDelegate property in SwipeTableOptions providing ability to customize expansion behavior. See the README and API documentation for more details.
    • New transitionDelegate property in SwipeAction providing ability to customize transition behavior of individual actions as the swipe gesture is performed. See the README and API documentation for more details. (#9)
    • Example app now lets you choose circular button style to demo the new transitionDelegate and expansionDelegate.

    Updated

    • Internal SwipeActionButton layout to separate the background color from the actual UIButton
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Feb 23, 2017)

    Fixed

    • Active animations were not always stopped when a new pan gesture began.
    • Images are not aligned properly on buttons without a title. (#6)

    Added

    • New options in SwipeTableOptions to for more layout customization. (#7)
    • Example app now lets you choose between buttons with title + image, title only, and image only
    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Feb 20, 2017)

    Fixed

    • Call reset at the end of a destructive swipe to ensure the tableView gestures are re-enabled (#3).
    • Feedback was not being generated when swiping from non-centered state
    • SwipeTableViewCellDelegate compiler error in README example.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Feb 19, 2017)

    Breaking

    • Update SwipeTableViewCellDelegate allowing editActionsForRowAt to return nil and prevent swiping in the supplied orientation (#2).

    Added

    • Example app now lets you choose to disable swiping right.
    • Expose hideSwipe(animated:) to allow the cell to be programmatically hidden.
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Feb 15, 2017)

Simple timeline view implemented by UITableViewCell

TimelineTableViewCell TimelineTableViewCell is a simple timeline view implemented by UITableViewCell. The UI design of TimelineTableViewCell is inspir

Zheng-Xiang Ke 1.3k Dec 25, 2022
A Swift library for swipeable table cells

BWSwipeRevealCell Using the library **Note: Use version 1.0.1 for Swift 2.3 support and version 2.0.0 or higher for Swift 3 support ** There are two m

Kyle Newsome 67 May 11, 2022
Convenient UITableViewCell subclass that implements a swippable content to trigger actions (similar to the Mailbox app).

MCSwipeTableViewCell An effort to show how one would implement a UITableViewCell like the one we can see in the very well executed Mailbox iOS app. Pr

Ali Karagoz 3k Dec 16, 2022
An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions.

MGSwipeTableCell MGSwipeTableCell is an easy to use UITableViewCell subclass that allows to display swipeable buttons with a variety of transitions. T

Imanol Fernandez 7k Dec 26, 2022
INTUZ is presenting an interesting a Multilevel Expand/Collapse UITableView App Control to integrate inside your native iOS-based application

INTUZ is presenting an interesting a Multilevel Expand/Collapse UITableView App Control to integrate inside your native iOS-based application. MultilevelTableView is a simple component, which lets you use the tableview with multilevel tree view in your project.

INTUZ 3 Oct 3, 2022
Simple single-selection or multiple-selection checklist, based on UITableView

SelectionList Simple single-selection or multiple-selection checklist, based on UITableView. Usage let selectionList = SelectionList() selectionList.i

Yonat Sharon 111 Oct 6, 2022
ClassicPhotos is a TableView App demos how to optimize image download and filter with operation queue.

ClassicPhotos ClassicPhotos is a TableView App demos how to optimize image download and filter with operation queue. With Operation and Operation Queu

Kushal Shingote 2 Dec 18, 2021
A subclass of UITableView that styles it like Settings.app on iPad

TORoundedTableView As of iOS 13, Apple has released an official version of this table view style called UITableViewStyleInsetGrouped! Yay! In order to

Tim Oliver 162 Nov 2, 2022
Swift package for easily rendering text tables. Inspired by the Python tabulate library.

TextTable Easily print textual tables in Swift. Inspired by the Python tabulate library. Upcoming Changes See details on an upcoming change.

Cristian Filipov 102 Jan 5, 2023
Simple static table views for iOS in Swift.

Simple static table views for iOS in Swift. Static's goal is to separate model data from presentation. Rows and Sections are your “view models” for yo

Venmo 1.3k Nov 19, 2022
A simple way to create a UITableView for settings in Swift.

QuickTableViewController A simple way to create a table view for settings, including: Table view cells with UISwitch Table view cells with center alig

Cheng-Yao Lin 525 Dec 20, 2022
A pixel perfect replacement for UITableView section index, written in Swift

MYTableViewIndex MYTableViewIndex is a re-implementation of UITableView section index. This control is usually seen in apps displaying contacts, track

Yury 520 Oct 27, 2022
A no-nonsense way to write cleaner UITableViewDelegate and UITableViewDataSource in Swift.

CascadingTableDelegate A no-nonsense way to write cleaner UITableViewDelegate and UITableViewDataSource. Why is this library made? In common iOS devel

Ricardo Pramana Suranta 920 Dec 14, 2022
TableViews - Emoji Table View For iOS With Swift

TableViews Hello! This is EmojiTableView. Let me introduce you my first app when

null 0 Jan 2, 2022
BaseTableViewOriginal - Base TableView Original With Swift

BaseTableViewOriginal Example To run the example project, clone the repo, and ru

Viacheslav 0 Feb 2, 2022
Ghullam Abbas 5 Feb 16, 2022
An easy-to-use UITableViewCell subclass that implements a swippable content view which exposes utility buttons (similar to iOS 7 Mail Application)

SWTableViewCell An easy-to-use UITableViewCell subclass that implements a swipeable content view which exposes utility buttons (similar to iOS 7 Mail

Christopher Wendel 7.2k Dec 31, 2022
UICollectionViewCell with checkbox when it isSelected and empty circle when not - like Photos.app "Select" mode.

CheckmarkCollectionViewCell UICollectionViewCell with checkbox when it isSelected and empty circle when not - like Photos.app "Select" mode. Usage cla

Yonat Sharon 62 Oct 19, 2022
Simple timeline view implemented by UITableViewCell

TimelineTableViewCell TimelineTableViewCell is a simple timeline view implemented by UITableViewCell. The UI design of TimelineTableViewCell is inspir

Zheng-Xiang Ke 1.3k Dec 25, 2022
A Swift library for swipeable table cells

BWSwipeRevealCell Using the library **Note: Use version 1.0.1 for Swift 2.3 support and version 2.0.0 or higher for Swift 3 support ** There are two m

Kyle Newsome 67 May 11, 2022