An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of transitions.

Overview

MGSwipeTableCell

Carthage compatible

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

This library is compatible with all the different ways to create a UITableViewCell: system predefined styles, programmatically created cells, cells loaded from a xib and prototype cells within a storyboard. You can use autolayout if you want.

Works on iOS >= 5.0. Tested on all iOS versions on iPhone and iPad: iOS 7, iOS 8, iOS 9, iOS 10, iOS 11, iOS 12, iOS 13

Transitions demo

Border transition

Clip transition

3D transition

Static transition

Drag transition

API Reference

See MGSwipeTableCell.h header file for a complete overview of the capabilities of the class.

See MailAppDemo for a complete project which mimics Apple's Mail App (written in Objective-C)

See MailAppDemoSwift for a complete project which mimics Apple's Mail App (Written in Swift)

See SpotifyDemo for a complete project which mimics Spotify App swipe style

See MGSwipeDemo for a complete project where you can test the variety of transitions on a real device/simulator.

Setup your project

You can use CocoaPods to include MGSwipeTableCell into you project:

pod 'MGSwipeTableCell'

You can use Carthage to include MGSwipeTableCell into your project. Just add this dependency to your Cartfile:

github "MortimerGoro/MGSwipeTableCell"

You can use Swift Package Manager to include MGSwipeTableCell into you project:

.package(url: "https://github.com/MortimerGoro/MGSwipeTableCell.git", from: "1.6.0")

Usage

Basic

Integrating MGSwipeTableCell in your project is very easy. Basically, you only have to inherit from MGSwipeTableCell instead of UITableViewCell, or directly instantiate MGSwipeTableCell instances with iOS predefined cell styles. You can layout your cell content as you are used to do, MGSwipeTableCell doesn't force you to change layouts.

Here is a example of a MGSwipeTableCell using iOS predefined styles. You can set an array of buttons to cell.leftButtons and/or cell.rightButtons properties. MGSwipeButton is a convenience class, you are not forced to use it. You can use your own UIButtons or UIViews. You can configure transitions (and swipe thresholds) with the leftSwipeSettings and/or rightSwipeSettings properties

Objective-C
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * reuseIdentifier = @"programmaticCell";
    MGSwipeTableCell * cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
    if (!cell) {
        cell = [[MGSwipeTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier];
    }

    cell.textLabel.text = @"Title";
    cell.detailTextLabel.text = @"Detail text";
    cell.delegate = self; //optional


    //configure left buttons
    cell.leftButtons = @[[MGSwipeButton buttonWithTitle:@"" icon:[UIImage imageNamed:@"check.png"] backgroundColor:[UIColor greenColor]],
                          [MGSwipeButton buttonWithTitle:@"" icon:[UIImage imageNamed:@"fav.png"] backgroundColor:[UIColor blueColor]]];
    cell.leftSwipeSettings.transition = MGSwipeTransition3D;

    //configure right buttons
    cell.rightButtons = @[[MGSwipeButton buttonWithTitle:@"Delete" backgroundColor:[UIColor redColor]],
                           [MGSwipeButton buttonWithTitle:@"More" backgroundColor:[UIColor lightGrayColor]]];
    cell.rightSwipeSettings.transition = MGSwipeTransition3D;
    return cell;
}
Swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
    let reuseIdentifier = "programmaticCell"
    var cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! MGSwipeTableCell

    cell.textLabel!.text = "Title"
    cell.detailTextLabel!.text = "Detail text"
    cell.delegate = self //optional

    //configure left buttons
    cell.leftButtons = [MGSwipeButton(title: "", icon: UIImage(named:"check.png"), backgroundColor: .green),
                        MGSwipeButton(title: "", icon: UIImage(named:"fav.png"), backgroundColor: .blue)]
    cell.leftSwipeSettings.transition = .rotate3D

    //configure right buttons
    cell.rightButtons = [MGSwipeButton(title: "Delete", backgroundColor: .red),
                         MGSwipeButton(title: "More",backgroundColor: .lightGray)]
    cell.rightSwipeSettings.transition = .rotate3D

    return cell
}

In order to listen for button click events you can implement the optional MGSwipeTableCellDelegate, or if you are too lazy to do that, the MGSwipeButton class comes with a convenience block callback ;)

Objective-c
[MGSwipeButton buttonWithTitle:@"More" backgroundColor:[UIColor lightGrayColor] callback:^BOOL(MGSwipeTableCell *sender) {
      NSLog(@"Convenience callback for swipe buttons!");
}]
Swift
MGSwipeButton(title: "Delete", backgroundColor: .red) {
      (sender: MGSwipeTableCell!) -> Bool in
      print("Convenience callback for swipe buttons!")
      return true
    }

Delegate

MGSwipeTableCellDelegate is an optional delegate to configure swipe buttons or to receive triggered actions or another events. Buttons can be configured inline when the cell is created instead of using this delegate, but using the delegate improves memory usage since buttons are only created on demand.

@protocol MGSwipeTableCellDelegate <NSObject>

@optional
/**
 * Delegate method to enable/disable swipe gestures
 * @return YES if swipe is allowed
 **/
-(BOOL) swipeTableCell:(MGSwipeTableCell*) cell canSwipe:(MGSwipeDirection) direction;
/**
 * Delegate method invoked when the current swipe state changes
 @param state the current Swipe State
 @param gestureIsActive YES if the user swipe gesture is active. No if the uses has already ended the gesture
 **/
-(void) swipeTableCell:(MGSwipeTableCell*) cell didChangeSwipeState:(MGSwipeState) state gestureIsActive:(BOOL) gestureIsActive;
/**
 * Called when the user clicks a swipe button or when a expandable button is automatically triggered
 * @return YES to autohide the current swipe buttons
 **/
-(BOOL) swipeTableCell:(MGSwipeTableCell*) cell tappedButtonAtIndex:(NSInteger) index direction:(MGSwipeDirection)direction fromExpansion:(BOOL) fromExpansion;
/**
 * Delegate method to setup the swipe buttons and swipe/expansion settings
 * Buttons can be any kind of UIView but it's recommended to use the convenience MGSwipeButton class
 * Setting up buttons with this delegate instead of using cell properties improves memory usage because buttons are only created in demand
 * @param swipeTableCell the UITableViewCell to configure. You can get the indexPath using [tableView indexPathForCell:cell]
 * @param direction The swipe direction (left to right or right to left)
 * @param swipeSettings instance to configure the swipe transition and setting (optional)
 * @param expansionSettings instance to configure button expansions (optional)
 * @return Buttons array
 **/
-(NSArray*) swipeTableCell:(MGSwipeTableCell*) cell swipeButtonsForDirection:(MGSwipeDirection)direction
             swipeSettings:(MGSwipeSettings*) swipeSettings expansionSettings:(MGSwipeExpansionSettings*) expansionSettings;

@end

Expandable buttons

Buttons are not expandable by default. You can set up expandable buttons using cell.leftExpansion and cell.rightExpansion properties

Expandable button events are triggered automatically when the user ends the swipe gesture and the expansion is active (configurable via threshold value). Triggered expandable buttons can bounce back to their initial position or fill the entire UITableViewCell, you can select the desired animation using fillOnTrigger property.

@interface MGSwipeExpansionSettings: NSObject
/** index of the expandable button (in the left or right buttons arrays) */
@property (nonatomic, assign) NSInteger buttonIndex;
/** if true the button fills the cell on trigger, else it bounces back to its initial position */
@property (nonatomic, assign) BOOL fillOnTrigger;
/** Size proportional threshold to trigger the expansion button. Default value 1.5 */
@property (nonatomic, assign) CGFloat threshold;
@end

Rounded corners and swipe buttons

MGSwipeTableCell supports rounded corners. Example:

cell.layer.cornerRadius = 50
cell.backgroundColor = UIColor.gray
cell.clipsToBounds = true
cell.swipeBackgroundColor = UIColor.gray

License

The MIT License (MIT)

Copyright (c) 2014 Imanol Fernandez @MortimerGoro

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • Subclassing MGSwipeTableCell

    Subclassing MGSwipeTableCell

    Hi,

    I am trying to use MGSwipeCell in a storyboard based app. I subclassed my table cell views for using custom IBOutlets. Now I changed the Superclass of those classes to "MGSwipeTableCell" and added two left buttons to the cell but I simple can't get the buttons to show up. Do I need to change something in my sub-classes?

    Thank you for your work!

    Philip

    opened by plaetzchen 19
  • Conflict with iOS standard

    Conflict with iOS standard "swipe to go back"

    Info received by mail:

    Basically, it seems as though the MGSTC panGesture and the iOS standard "swipe to go back" gesture are stealing one anthers touches. Strangely, it seems like whichever is engaged first disables the other. i.e. Swipe a cell and the swipe-back gesture will never get called, it will only swipe other cells. But, if you engage the swipe-back gesture first, only part-ways and return into the view cell will no longer swipe!

    At first I thought the solution would be to modify the _swipeView bounds so that the MGSTC panGesture isn't called if it initiate within the first x points (sy, 5) of the left screen edge. For some reason I can't get this to work properly and it adds strange behaviour (cells will only swipe once and then never again? weird).

    Anyway, it's an unlikely situation for any of my users to find them in, but something I thought I'd bring to your attention. Any ideas?

    opened by MortimerGoro 16
  • Delegate call multiple time on single touch on iOS 9

    Delegate call multiple time on single touch on iOS 9

    - (BOOL) swipeTableCell:(MGSwipeTableCell*)cell tappedButtonAtIndex:(NSInteger)index direction:(MGSwipeDirection)direction fromExpansion:(BOOL)fromExpansion

    delegate calls multiple time.

    This is working fine under iOS 7-8

    opened by hagile 12
  • Spotify style cell expansion

    Spotify style cell expansion

    Hi, i'm considering using this library since it offers so many features and it seems to be pretty rock solid!

    Would it be possible to make the cell expansion similar to the way Spotify's app does it? They recently pushed out an update with really slick gestures. From what I can tell (I may very well be mistaken), it appears that out of the box this library only allows an MGSwipeButton to expand by moving the button along with the cells content view, in a right-justified manner (when expanding from left to right for example). That's the way it works in your Mail app demo as well. The Spotify app does two things which interest me:

    1. the "button" if you will, is center justified throughout the expansion. It looks exactly the same at first to the way this library does the transition style "MGSwipeTransitionClipCenter". However if you look at the way Spotify has done it, it appears that after the button is clipped, their button does not "stick" to the right.
    2. the expanded background color "changes" after the cell is activated/deactivated, so the user knows whether the gesture will take effect if the gesture is ended throughout the drag.
    3. once the cell is released, the cell completely returns back to its regular position.

    Is this supported out of the box in any way, and if not, do you think this would be possible using this library? I would very much be interested in this functionality. I have provided a gif in case you haven't used the Spotify app before:

    Spotify cell gestures

    Sorry for the big wall of text! :)

    opened by mzgaljic 10
  • [iOS 13] Crash in `hideSwipeOverlayIfNeeded`

    [iOS 13] Crash in `hideSwipeOverlayIfNeeded`

    Our users report crashes on iOS 13 beta. See stacktrace below

    Exception Type:  EXC_CRASH (SIGKILL)
    Exception Codes: 0x0000000000000000, 0x0000000000000000
    Exception Note:  EXC_CORPSE_NOTIFY
    Termination Reason: Namespace OBJC, Code 0x1
    Triggered by Thread:  0
    
    Thread 0 name:
    Thread 0 Crashed:
    0   libsystem_kernel.dylib        	0x00000001918fb870 __terminate_with_payload + 8
    1   libsystem_kernel.dylib        	0x00000001918fdf80 abort_with_payload_wrapper_internal + 136 (terminate_with_reason.c:76)
    2   libsystem_kernel.dylib        	0x00000001918fdef8 abort_with_reason + 32 (terminate_with_reason.c:86)
    3   libobjc.A.dylib               	0x00000001918465f8 _objc_fatalv(unsigned long long, unsigned long long, char const*, char*) + 108 (objc-errors.mm:202)
    4   libobjc.A.dylib               	0x000000019184658c _objc_fatal(char const*, ...) + 32 (objc-errors.mm:218)
    5   libobjc.A.dylib               	0x0000000191842ac8 weak_register_no_lock + 320 (objc-weak.mm:418)
    6   libobjc.A.dylib               	0x00000001918445cc objc_storeWeak + 336 (NSObject.mm:335)
    7   UIKitCore                     	0x0000000195ca60d4 -[UITableViewCell _tableView] + 268 (UITableViewCell.m:3866)
    8   UIKitCore                     	0x0000000195ca8900 -[UITableViewCell _selectedBackgroundView:] + 96 (UITableViewCell.m:4414)
    9   UIKitCore                     	0x0000000195ca1444 -[UITableViewCell _setSelectionStyle:selectionTintColor:] + 172 (UITableViewCell.m:2379)
    10  MGSwipeTableCell              	0x00000001032f32cc -[MGSwipeTableCell hideSwipeOverlayIfNeeded] + 252 (MGSwipeTableCell.m:925)
    11  UIKitCore                     	0x0000000195faa270 __UIViewWillBeRemovedFromSuperview + 284 (UIView.m:10702)
    12  UIKitCore                     	0x0000000195fa9ff8 -[UIView(Hierarchy) removeFromSuperview] + 96 (UIView.m:10798)
    13  UIKitCore                     	0x0000000195ca470c -[UITableViewCell removeFromSuperview] + 148 (UITableViewCell.m:3509)
    14  UIKitCore                     	0x0000000195f92eec -[UIView dealloc] + 396 (UIView.m:4525)
    15  UIKitCore                     	0x0000000195f37e80 -[UIScrollView dealloc] + 844 (UIScrollView.m:1308)
    16  UIKitCore                     	0x0000000195ce575c -[UITableView dealloc] + 368 (UITableView.m:5561)
    17  libobjc.A.dylib               	0x0000000191844438 objc_release + 136 (objc-object.h:0)
    18  CoreFoundation                	0x0000000191a54f64 __RELEASE_OBJECTS_IN_THE_ARRAY__ + 116 (NSCollectionAux.h:70)
    19  CoreFoundation                	0x00000001919dfe74 -[__NSArrayM dealloc] + 172 (NSArrayM.m:473)
    20  libobjc.A.dylib               	0x0000000191844438 objc_release + 136 (objc-object.h:0)
    21  libobjc.A.dylib               	0x0000000191845a08 AutoreleasePoolPage::releaseUntil(objc_object**) + 184 (NSObject.mm:777)
    22  libobjc.A.dylib               	0x00000001918458f4 objc_autoreleasePoolPop + 232 (NSObject.mm:1037)
    23  UIKitCore                     	0x0000000195f930b0 -[UIView dealloc] + 848 (UIView.m:4557)
    24  libobjc.A.dylib               	0x0000000191844438 objc_release + 136 (objc-object.h:0)
    25  libobjc.A.dylib               	0x0000000191845a08 AutoreleasePoolPage::releaseUntil(objc_object**) + 184 (NSObject.mm:777)
    26  libobjc.A.dylib               	0x00000001918458f4 objc_autoreleasePoolPop + 232 (NSObject.mm:1037)
    27  CoreFoundation                	0x0000000191b1be68 _CFAutoreleasePoolPop + 32 (NSObject.m:790)
    28  CoreFoundation                	0x0000000191a8539c __CFRunLoopRun + 1988 (CFRunLoop.c:3063)
    29  CoreFoundation                	0x0000000191a848b0 CFRunLoopRunSpecific + 480 (CFRunLoop.c:3183)
    30  GraphicsServices              	0x000000019c05e534 GSEventRunModal + 108 (GSEvent.c:2246)
    31  UIKitCore                     	0x0000000195b24d34 UIApplicationMain + 1940 (UIApplication.m:4684)
    32  R                             	0x0000000100082564 main + 104 (main.m:16)
    33  libdyld.dylib                 	0x0000000191905764 start + 4
    
    opened by novkostya 9
  • Swipe doesn't work for cached cells after data reload

    Swipe doesn't work for cached cells after data reload

    Everything works OK until I call a data reload then cells are still cached for the number of records that lived in the previous data set. All cells up to that number in the new data set will not swipe.

    opened by hswope 9
  • Button padding

    Button padding

    One more small issue, I created my swipe buttons like below, but noticed that there was very little space around the text when displayed on screen. [MGSwipeButton buttonWithTitle:@"Trash" backgroundColor:[UIColor redColor]]; [MGSwipeButton buttonWithTitle:@"More" backgroundColor:[UIColor lightGrayColor]];

    To get around this I added spaces to one of the titles like so which caused both the Trash and More button widths to expand: [MGSwipeButton buttonWithTitle:@" Trash " backgroundColor:[UIColor redColor]];

    Is there a way you could implement a default padding similar to how Apple and components like MSCMoreOptionTableView display so I can avoid doing this myself?

    Looking forward to adding this to my app so I can add right swipe as well. Thanks!

    opened by robjkc 9
  • How to activate swiping the cell when you swipe the buttons in the cell

    How to activate swiping the cell when you swipe the buttons in the cell

    Hi, Forgive me if its a simple question but I am learning and I really like your component.

    I need your assistance with the following please:-

    I am creating a MGSwipeTableCell that is full of buttons leaving no white empty space. I would like to be able to swipe the cell when I tap the buttons to swipe. Thank you.

    opened by waelsaad 8
  • Automatically reveal button as hint

    Automatically reveal button as hint

    Is it possible to automatically show and hide the left or right buttons without the user swiping. This would be a hint to the user that those buttons are present.

    For example, in Amazon's app:

    revealshowhint

    opened by bharatkrishna 7
  • Swift protocol prototypes

    Swift protocol prototypes

    If anyone is interested:

    func swipeTableCell(cell: MGSwipeTableCell!, canSwipe direction: MGSwipeDirection) -> Bool {
    }
    
    func swipeTableCell(cell: MGSwipeTableCell!, didChangeSwipeState state: MGSwipeState, gestureIsActive: Bool) {
    }
    
    func swipeTableCell(cell: MGSwipeTableCell!, tappedButtonAtIndex index: Int, direction: MGSwipeDirection, fromExpansion: Bool) -> Bool {
    }
    
    opened by dhoerl 7
  • Duplicated callback

    Duplicated callback

    [MGSwipeButton buttonWithTitle:@"More" backgroundColor:[UIColor lightGrayColor] callback:^BOOL(MGSwipeTableCell *sender) { NSLog(@"Convenience callback for swipe buttons!"); }]

    This callback function is called several times when I click the button. "Convenience callback for swipe buttons! appear multi time" "Convenience callback for swipe buttons! appear multi time" ...

    -(instancetype) initWithButtons:(NSArray*) buttonsArray direction:(MGSwipeDirection) direction differentWidth:(BOOL) differentWidth that function is called several times when swipe tableviewceill without click swipe button.

    screen shot 2015-11-12 at 4 40 18 pm

    @MortimerGoro

    opened by Ying1986 6
  • occasionally i see crash in my app.

    occasionally i see crash in my app.

    The app crashes in ios 14. At hit test in MGSwipecell. here are the relevant crash logs

    Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Subtype: KERN_PROTECTION_FAILURE at 0x000000124ebc3498 VM Region Info: 0x124ebc3498 is in 0x1000000000-0x7000000000; bytes after start: 9910891672 bytes before end: 402405968743 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL commpage (reserved) fc0000000-1000000000 [ 1.0G] ---/--- SM=NUL ...(unallocated) ---> GPU Carveout (reserved) 1000000000-7000000000 [384.0G] ---/--- SM=NUL ...(unallocated) UNUSED SPACE AT END

    36 UIKitCore 0x0000000199fc0278 -[UIView(Geometry) hitTest:withEvent:] + 476 (UIView.m:9951) 37 UIKitCore 0x0000000199c602d8 -[UITableViewCell hitTest:withEvent:] + 112 (UITableViewCell.m:6168) 38 0x0000000102ba5cbc -[MGSwipeTableCell hitTest:withEvent:] (MGSwipeTableCell.m:0) 39 UIKitCore 0x0000000199fc07c0 -[UIView(Geometry) _hitTest:withEvent:windowServerHitTestWindow:] + 96 (UIView.m: @MortimerGoro

    opened by nikhildhavale 0
  • Hang on swipe in iOS 14.4

    Hang on swipe in iOS 14.4

    Hi,

    Testers on real phones and simulators (including me) are seeing a hang in swiping that does not occur on iOS 13.

    At the same time, the log is spammed with these messages:

    2021-04-14 15:04:48.790955-0400 BuildupDev[19163:221235] [Snapshotting] 
    View (0x7f9e0a172800, BUTableViewCell) drawing with afterScreenUpdates:YES 
    inside CoreAnimation commit is not supported.
    

    (In our app, @interface BUTableViewCell : MGSwipeTableCell)

    CPU is on 95% and memory continually rises so it looks something like an infinite loop. Screen Shot 2021-04-14 at 7 40 39 PM

    Has anyone else reproduced this?

    opened by toby5box 6
  •  Problem when using shadow

    Problem when using shadow

    Hey! I'm having a problem. I am using drop shadow for cells in my table. when the swipe is triggered the cell darkens, how can I fix it?

    ` import UIKit import MGSwipeTableCell

    class FileTableViewCell: MGSwipeTableCell {

    // MARK: - Outlets
    
    @IBOutlet weak var containerView: UIView!{
        didSet{
            containerView.layer.masksToBounds = true
    
            containerView.layer.cornerRadius = 12
            containerView.layer.borderWidth = 1
            containerView.layer.borderColor = UIColor.black.withAlphaComponent(0.07).cgColor
            
        }
    }
    
    @IBOutlet weak var iconImage: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var descriptionLabel: UILabel!
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        backgroundColor = .clear
        contentView.backgroundColor = .clear
    
        layer.masksToBounds = false
        layer.shadowColor = UIColor.black.withAlphaComponent(0.07).cgColor
        layer.shadowOffset = CGSize(width: 0, height: 3)
        layer.shadowOpacity = 1
        layer.shadowRadius = 15
        
    }
    
    
    func fillCell(directory: Directory) {
        nameLabel.text = directory.name
        if let description =  directory.description {
            descriptionLabel.isHidden = false
            descriptionLabel.text = description
        } else {
            descriptionLabel.isHidden = true
        }
        
        iconImage.image = directory.image
    }
    

    } `

    opened by KirillStaroselskiy 1
  • Swipe not working with Magic Trackpad 2

    Swipe not working with Magic Trackpad 2

    Since iOS 13.4 we can use the Magic Trackpad 2 (and Magic Mouse) cursor in our iPads.

    Horizontal swipe with 2 fingers doesn't work with MGSwipeTableCell (it has a glitchy behavior) while this gesture works perfectly with native Apple swipe cells.

    opened by EGDBE 0
Owner
Imanol Fernandez
Imanol Fernandez
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
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
Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift.

SwipeCellKit Swipeable UITableViewCell/UICollectionViewCell based on the stock Mail.app, implemented in Swift. About A swipeable UITableViewCell or UI

null 6k Jan 7, 2023
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
UIViewController subclass inspired by "Inbox by google" animated transitioning.

SAInboxViewController SAInboxViewController realizes Inbox like view transitioning. You can launch sample project on web browser from here. Features I

Taiki Suzuki 298 Jun 29, 2022
Display list of Marvel comic Characters and its detail view

Marvel Universe Display list of Marvel comic Characters and its detail view Installation Dependencies in this project are provided via Xcodegen (proje

null 1 Oct 19, 2021
This framework allows you to build Table views using UIKit with syntax similar to SwiftUI

This framework allows you to build Table views using UIKit with syntax similar to SwiftUI

Fun 60 Dec 17, 2022
Use Yelp API to fetch restuarants around a location and show them in a table view

Yelp Use Yelp API to fetch restuarants around a location and show them in a table view - Infinite scrolling, Prefetching, Image Caching. Design Patter

null 0 Nov 1, 2021
a TableView have thumbnail cell only, and you can use gesture let it expands other expansionView, all diy

ZYThumbnailTableView #####可展开型预览TableView,开放接口,完全自由定制 #####An expandable preview TableView, custom-made all the modules completely with open API you c

null 950 Oct 17, 2022
Simple and beautiful stacked UIView to use as a replacement for an UITableView, UIImageView or as a menu

VBPiledView simple but highly effective animation and interactivity! By v-braun - viktor-braun.de. Preview Description Very simple and beautiful stack

Viktor Braun 168 Jan 3, 2023
Easy UITableView drag-and-drop cell reordering

SwiftReorder NOTE: Some users have encountered compatibility issues when using this library with recent versions of iOS. For apps targeting iOS 11 and

Adam Shin 378 Dec 13, 2022
Elegant and easy way to integrate pagination with dummy views

AZTableView Controller Features Automatic pagination handling No more awkward empty TableView screen AZ TableView controller give you advantage to con

Afroz Zaheer 73 Oct 17, 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
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
A fully customisable subclass of the native UIControl which allows you to create beautiful buttons without writing any line of code.

A fully customisable subclass of the native UIControl which allows you to create beautiful buttons without writing any line of code. Preview You'll be

Lorenzo Greco 2.3k Dec 31, 2022
A fully customisable swift subclass on UIButton which allows you to create beautiful buttons without writing any line of code.

JSButton Demo $ pod try JSButton ...or clone this repo and build and run/test the JSButton project in Xcode to see JSButton in action. If you don't ha

Jogendra 12 May 9, 2022
AlertTransition is a extensible library for making view controller transitions, especially for alert transitions.

AlertTransition AlertTransition is a extensible library for making view controller transitions, especially for alert transitions. Overview AlertTransi

Loopeer 570 Nov 29, 2022
A library that provides the ability to import/export Realm files from a variety of data container formats.

Realm Converter Realm Converter is an open source software utility framework to make it easier to get data both in and out of Realm. It has been built

Realm 212 Dec 9, 2022
This is Github user search demo app which made by many variety of design patterns.

iOSDesignPatternSamples This is Github user search demo app which made by many variety of design patterns. Application Structure SearchViewController.

Taiki Suzuki 679 Dec 11, 2022
Easy to use UITableViewCell implementing swiping to trigger actions.

SwipyCell Swipeable UITableViewCell inspired by the popular Mailbox App, implemented in Swift. Preview Exit Mode The .exit mode is the original behavi

Moritz Sternemann 249 Dec 5, 2022