├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── Example ├── RevealingTableViewCellExample.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── RevealingTableViewCellExample.xcscheme └── RevealingTableViewCellExample │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── LICENSE ├── Package.swift ├── README.md ├── RevealingTableViewCell.podspec ├── RevealingTableViewCell.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── RevealingTableViewCell.xcscheme ├── RevealingTableViewCell ├── AutoLayoutTools.swift ├── DistanceHelper.swift ├── Info.plist ├── RevealingTableViewCell.h ├── RevealingTableViewCell.swift ├── TODOs └── UITableView+RevealingExtensions.swift ├── Screenshots ├── IBOutlets.png ├── RevealingCellScreenRecording10s.gif ├── ViewStructure.png └── app_icon_pivotlist.png └── docs ├── Classes.html ├── Classes ├── RevealingTableViewCell.html └── RevealingTableViewCell │ └── RevealingState.html ├── Extensions.html ├── Extensions └── UITableView.html ├── Protocols.html ├── Protocols └── RevealingTableViewCellDelegate.html ├── badge.svg ├── css ├── highlight.css └── jazzy.css ├── docsets ├── RevealingTableViewCell.docset │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── Documents │ │ ├── Classes.html │ │ ├── Classes │ │ │ ├── RevealingTableViewCell.html │ │ │ └── RevealingTableViewCell │ │ │ │ └── RevealingState.html │ │ ├── Extensions.html │ │ ├── Extensions │ │ │ └── UITableView.html │ │ ├── Protocols.html │ │ ├── Protocols │ │ │ └── RevealingTableViewCellDelegate.html │ │ ├── badge.svg │ │ ├── css │ │ │ ├── highlight.css │ │ │ └── jazzy.css │ │ ├── img │ │ │ ├── carat.png │ │ │ ├── dash.png │ │ │ └── gh.png │ │ ├── index.html │ │ ├── js │ │ │ ├── jazzy.js │ │ │ └── jquery.min.js │ │ ├── search.json │ │ └── undocumented.json │ │ └── docSet.dsidx └── RevealingTableViewCell.tgz ├── img ├── carat.png ├── dash.png └── gh.png ├── index.html ├── js ├── jazzy.js └── jquery.min.js ├── search.json └── undocumented.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c # we need to use this value even though the actual language is swift 2 | osx_image: xcode11.3 3 | 4 | branches: 5 | except: 6 | - legacy 7 | 8 | before_install: 9 | - gem install cocoapods -v '1.9.1' 10 | 11 | env: 12 | 13 | global: 14 | - LANG=en_US.UTF-8 15 | - PROJECT="RevealingTableViewCell.xcodeproj" 16 | - IOS_SCHEME="RevealingTableViewCellExample" 17 | - IOS_SDK=iphonesimulator13.2 18 | 19 | matrix: 20 | - DESTINATION="OS=12.4,name=iPhone 6s" SDK="$IOS_SDK" SCHEME="$IOS_SCHEME" POD_LINT="YES" # Only lint once. 21 | - DESTINATION="OS=12.4,name=iPhone 7" SDK="$IOS_SDK" SCHEME="$IOS_SCHEME" POD_LINT="NO" 22 | - DESTINATION="OS=10.3.1,name=iPad Air 2" SDK="$IOS_SDK" SCHEME="$IOS_SCHEME" POD_LINT="NO" 23 | 24 | script: 25 | - set -o pipefail 26 | - xcodebuild -version 27 | - xcodebuild -showsdks 28 | 29 | - if [ $POD_LINT == "YES" ]; then 30 | pod lib lint --quick; 31 | fi 32 | 33 | - xcodebuild build analyze -project Example/RevealingTableViewCellExample.xcodeproj -scheme RevealingTableViewCellExample -sdk "$SDK" -destination "$DESTINATION" ONLY_ACTIVE_ARCH=NO CODE_SIGNING_ALLOWED="NO" | xcpretty -c; 34 | 35 | notifications: 36 | email: 37 | on_success: never -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | __RevealingTableViewCell__ follows [Semantic Versioning](http://semver.org/). 4 | 5 | 6 | ## [1.1.1](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.1.1) 7 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.1.0...1.1.1) 8 | 9 | - Updated Cocoapods and Travis CI configurations 10 | 11 | --- 12 | 13 | ## [1.1.0](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.1.0) 14 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.9...1.1.0) 15 | 16 | - Updated to Swift 5 17 | - Updated Xcode settings of Example project 18 | 19 | --- 20 | 21 | ## [1.0.9](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.9) 22 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.7...1.0.9) 23 | 24 | - Updated to Swift 4.2 25 | - Fixed warning about `fabs` being renamed to `abs` 26 | - Updated Xcode settings of Example project 27 | - Committed `IDEWorkspaceChecks.plist` 28 | 29 | --- 30 | 31 | ## [1.0.7](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.7) 32 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.6...1.0.7) 33 | 34 | - Updated to Swift 4 35 | 36 | --- 37 | 38 | ## [1.0.6](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.6) 39 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.5...1.0.6) 40 | 41 | - Better README 42 | - Added the generated docset to the repo itself (`/docs`) in light of the fact that cocoadocs.org has been discontinued. 43 | 44 | --- 45 | 46 | ## [1.0.5](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.5) 47 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.4...1.0.5) 48 | 49 | - SPM Package description file added 50 | - Documentation and housekeeping 51 | 52 | --- 53 | 54 | ## [1.0.4](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.4) 55 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.3...1.0.4) 56 | 57 | - Carthage support added. 58 | 59 | --- 60 | 61 | ## [1.0.3](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.3) 62 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/1.0.2...1.0.3) 63 | 64 | - Documentation improvements. 65 | 66 | --- 67 | 68 | ## [1.0.2](https://github.com/sovata8/RevealingTableViewCell/releases/tag/1.0.2) 69 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/v1.0.1...1.0.2) 70 | 71 | - Documentation improvements. 72 | - Housekeeping (added changelog). 73 | 74 | --- 75 | 76 | ## [1.0.1](https://github.com/sovata8/RevealingTableViewCell/releases/tag/v1.0.1) 77 | [GitHub compare](https://github.com/sovata8/RevealingTableViewCell/compare/v1.0.0...v1.0.1) 78 | 79 | - Housekeeping (cocoapods) 80 | 81 | --- 82 | 83 | ## [1.0.0](https://github.com/sovata8/RevealingTableViewCell/releases/tag/v1.0.0) 84 | 85 | Initial release! 🎉 86 | 87 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample.xcodeproj/xcshareddata/xcschemes/RevealingTableViewCellExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // RevealingTableViewCellExample 4 | // 5 | // Created by sovata on 07/04/2017. 6 | // Copyright © 2017 Nikolay Suvandzhiev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | } 16 | 17 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example/RevealingTableViewCellExample/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // RevealingTableViewCellExample 4 | // 5 | // Created by sovata on 07/04/2017. 6 | // Copyright © 2017 Nikolay Suvandzhiev. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import RevealingTableViewCell 11 | 12 | class ViewController: UIViewController 13 | { 14 | override func viewDidLoad() 15 | { 16 | super.viewDidLoad() 17 | } 18 | 19 | 20 | @IBOutlet weak var uiTableView: UITableView! 21 | 22 | 23 | } 24 | 25 | 26 | 27 | extension ViewController: UITableViewDataSource 28 | { 29 | func numberOfSections(in tableView: UITableView) -> Int 30 | { 31 | return 1 32 | } 33 | 34 | 35 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 36 | { 37 | return 3 38 | } 39 | 40 | 41 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 42 | { 43 | let cellIdentifier: String 44 | 45 | switch indexPath.row 46 | { 47 | case 0: 48 | cellIdentifier = "DemoCell1" 49 | 50 | case 1: 51 | cellIdentifier = "DemoCell2" 52 | 53 | case 2: 54 | cellIdentifier = "DemoCell3" 55 | 56 | case 3: 57 | cellIdentifier = "DemoCell4" 58 | 59 | default: 60 | print("Unexpected row!") 61 | cellIdentifier = "DemoCell1" 62 | } 63 | 64 | let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RevealingTableViewCell 65 | cell.revealingCellDelegate = self 66 | return cell 67 | } 68 | } 69 | 70 | 71 | extension ViewController: UITableViewDelegate 72 | { 73 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 74 | { 75 | tableView.deselectRow(at: indexPath, animated: true) 76 | 77 | let cell = tableView.cellForRow(at: indexPath) as! RevealingTableViewCell 78 | 79 | if cell.revealingState != .closed 80 | { 81 | cell.setRevealingState(.closed, animated: true) 82 | } 83 | else 84 | { 85 | // do something else. 86 | } 87 | } 88 | } 89 | 90 | 91 | extension ViewController: UIScrollViewDelegate 92 | { 93 | func scrollViewDidScroll(_ scrollView: UIScrollView) 94 | { 95 | self.uiTableView.closeAllCells() 96 | } 97 | } 98 | 99 | 100 | extension ViewController: RevealingTableViewCellDelegate 101 | { 102 | func didStartPanGesture(cell: RevealingTableViewCell) 103 | { 104 | self.uiTableView.closeAllCells(exceptThisOne: cell) 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nikolay Suvandzhiev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | import PackageDescription 2 | 3 | let package = Package( 4 | name: "RevealingTableViewCell" 5 | ) 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RevealingTableViewCell 2 | 3 | [![Travis](https://img.shields.io/travis/sovata8/RevealingTableViewCell.svg)](https://travis-ci.org/sovata8/RevealingTableViewCell/) [![CocoaPods](https://img.shields.io/cocoapods/v/RevealingTableViewCell.svg)][linkPod] [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)][linkCarthage] 4 | [![license MIT](https://img.shields.io/cocoapods/l/RevealingTableViewCell.svg)][linkMITLicence] 5 | [![Swift 4.2](https://img.shields.io/badge/Swift-4.2-FD7835.svg?style=flat)](https://swift.org/) 6 | 7 | --- 8 | 9 |

10 | What is it? 11 | • 12 | Check it out 13 | • 14 | Installation 15 | • 16 | Usage 17 | • 18 | Documentation 19 |

20 | 21 | # 22 | 23 | ## What is it? 24 | `RevealingTableViewCell` is a `UITableViewCell` that can be swiped to reveal content underneath its main view. 25 | 26 | * Zero-code setup: `RevealingTableViewCell` can be set up through Interface Builder, with no code changes. 27 | * 'Bring your own views' - Note that `RevealingTableViewCell` does not provide anything other than the sliding view - it's up to you to set up any views that need be revealed, e.g. buttons etc.) 28 | 29 |
30 |

31 | 32 | 33 | ## Check it out 34 | 35 | ### CocoaPods 36 | ```bash 37 | pod try RevealingTableViewCell 38 | ``` 39 | (this command clones the example project in a temporary folder and opens it in Xcode) 40 | 41 | ### Directly from the repo 42 | Clone or download this repository and then open `Example/RevealingTableViewCellExample.xcodeproj`. 43 | 44 | ### Demo video 45 | Click to see an example 48 | 49 | (opens in YouTube) 50 | 51 | ## Installation 52 | Requires: `iOS 10 +` 53 | 54 | 55 | #### [CocoaPods][linkPod] (recommended) 56 | 57 | ```ruby 58 | pod 'RevealingTableViewCell' 59 | ``` 60 | 61 | #### [Carthage][linkCarthage] 62 | ```` 63 | github "sovata8/RevealingTableViewCell" 64 | ```` 65 | 66 | 67 | ## Usage 68 | No code changes required, everything is done in Interface Builder. 69 | Note that this framework does not provide anything other than the sliding view - it's up to you to set up any views that need be revealed (e.g. buttons, additional information etc.). 70 | 71 | 72 | These screenshots show how to set up your views and IBOutlets: 73 | 74 | # 75 | 76 |

77 | 78 | # 79 | 80 |

81 | 82 | # 83 | 84 | ### Step 1 85 | Use `RevealingTableViewCell` (or your subclass of it) as a custom class for your tableview cell in Interface Builder. 86 | 87 | ### Step 2 88 | Inside the cell's default `contentView`, put a subview and connect it to the the `IBOutlet` `uiView_mainContent`. This will be the view that slides sideways to reveal some content underneath. Using AutoLayout, pin this `uiView_mainContent` to it's superview (the `contentView`) using the following constraints: 89 | 90 | `uiView_mainContent.centerX = superview.centerX` 91 | `uiView_mainContent.width = superview.width` 92 | `uiView_mainContent.height = superview.height` 93 | `uiView_mainContent.centerY = superview.centerY` 94 | 95 | (or instead of the `height` and `centerY` constraints, you can use `top` and `bottom` constraints) 96 | 97 | 98 | ### Step 3 99 | Inside the cell's default `contentView`, put and connect `uiView_revealedContent_left` and/or `uiView_revealedContent_right` subviews. Pin them using AutoLayout to the corresponding sides of your cell. Fix their widths. Make sure they are behind the `uiView_mainContent`. 100 | 101 | ### Step 4 102 | That's all - run your app! 103 | 104 | 105 | 106 | 107 | ### Making the cells close when needed (optional) 108 | Usually, you would want cells to automatically close whenever you scroll the tableview, or when another cell is swiped sideways. To achieve this, use the provided tableview extension function `closeAllCells(exceptThisOne:)`. Here is an example (from the example project): 109 | 110 | ```swift 111 | // Close all cells when the tableview starts scrolling vertically 112 | extension ViewController: UIScrollViewDelegate 113 | { 114 | func scrollViewDidScroll(_ scrollView: UIScrollView) 115 | { 116 | self.uiTableView.closeAllCells() 117 | } 118 | } 119 | ``` 120 | 121 | ```swift 122 | // Close all other cells when a particular cell starts being swiped 123 | extension ViewController: RevealingTableViewCellDelegate 124 | { 125 | func didStartPanGesture(cell: RevealingTableViewCell) 126 | { 127 | self.uiTableView.closeAllCells(exceptThisOne: cell) 128 | } 129 | } 130 | ``` 131 | (of course when you are creating the cell in your `cellForRowAt indexPath` logic, don't forget to set the delegate like this: `cell.revealingCellDelegate = self`) 132 | 133 | 134 | ## Documentation 135 | Check out the auto-generated [Documentation](docs/Classes/RevealingTableViewCell.html). 136 | (If you're reading this on GitHub, and the above link opens the html source, try [this](http://htmlpreview.github.io/?https://github.com/sovata8/RevealingTableViewCell/blob/1.1.1/docs/Classes/RevealingTableViewCell.html)) 137 | 138 | ## Used by 139 | 140 | PivotList Logo 141 | [PivotList](https://pivotlist.app/) 142 | 143 | Please let me know if you use `RevealingTableViewCell` in your app and would like to be mentioned here. (either email me or create e new issue with the "usedby" label) 144 | 145 | ## Known limitations and considerations 146 | The way this library works requires that all the 'hidden' views (the ones that are behind the main view and are revealed when sliding), are in the view hierarchy of the cell at all times, even if they are never shown. This is obviously not great when performance matters. 147 | 148 | 149 | [linkDocumentation]:http://cocoadocs.org/docsets/RevealingTableViewCell 150 | [linkPod]:https://cocoapods.org/pods/RevealingTableViewCell 151 | [linkMITLicence]:http://opensource.org/licenses/MIT 152 | [linkCarthage]:https://github.com/Carthage/Carthage 153 | 154 | 155 | ## License 156 | This project is licensed under the terms of the MIT license. See the [LICENSE](LICENSE) file. 157 | -------------------------------------------------------------------------------- /RevealingTableViewCell.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod spec lint RevealingTableViewCell.podspec' to ensure this is a 3 | # valid spec and to remove all comments including this before submitting the spec. 4 | # 5 | # To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html 6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | 11 | # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 12 | # 13 | # These will help people to find your library, and whilst it 14 | # can feel like a chore to fill in it's definitely to your advantage. The 15 | # summary should be tweet-length, and the description more in depth. 16 | # 17 | 18 | s.name = "RevealingTableViewCell" 19 | s.version = "1.1.1" 20 | s.summary = "RevealingTableViewCell is a UITableViewCell that can be swiped to reveal content underneath its main view." 21 | 22 | # This description is used to generate tags and improve search results. 23 | # * Think: What does it do? Why did you write it? What is the focus? 24 | # * Try to keep it short, snappy and to the point. 25 | # * Write the description between the DESC delimiters below. 26 | # * Finally, don't worry about the indent, CocoaPods strips it! 27 | s.description = <<-DESC 28 | 29 | "RevealingTableViewCell is a UITableViewCell that can be swiped to reveal content underneath its main view." 30 | 31 | DESC 32 | 33 | s.homepage = "https://github.com/sovata8/RevealingTableViewCell" 34 | # s.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" 35 | 36 | 37 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 38 | # 39 | # Licensing your code is important. See http://choosealicense.com for more info. 40 | # CocoaPods will detect a license file if there is a named LICENSE* 41 | # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. 42 | # 43 | 44 | s.license = "MIT" 45 | # s.license = { :type => "MIT", :file => "FILE_LICENSE" } 46 | 47 | 48 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 49 | # 50 | # Specify the authors of the library, with email addresses. Email addresses 51 | # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also 52 | # accepts just a name if you'd rather not provide an email address. 53 | # 54 | # Specify a social_media_url where others can refer to, for example a twitter 55 | # profile URL. 56 | # 57 | 58 | s.author = { "Nikolay Suvandzhiev" => "mail@nikolaysuvandzhiev.com" } 59 | # Or just: s.author = "sovata" 60 | # s.authors = { "sovata" => "nikolay.suvandzhiev@gmail.com" } 61 | # s.social_media_url = "http://twitter.com/sovata" 62 | 63 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 64 | # 65 | # If this Pod runs only on iOS or OS X, then specify the platform and 66 | # the deployment target. You can optionally include the target after the platform. 67 | # 68 | 69 | # s.platform = :ios 70 | s.platform = :ios, "10.0" 71 | 72 | # When using multiple platforms 73 | # s.ios.deployment_target = "5.0" 74 | # s.osx.deployment_target = "10.7" 75 | # s.watchos.deployment_target = "2.0" 76 | # s.tvos.deployment_target = "9.0" 77 | 78 | 79 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 80 | # 81 | # Specify the location from where the source should be retrieved. 82 | # Supports git, hg, bzr, svn and HTTP. 83 | # 84 | # s.source = { :git => "http://EXAMPLE/RevealingTableViewCell.git", :tag => "#{s.version}" } 85 | s.source = { :git => "https://github.com/sovata8/RevealingTableViewCell.git", :tag => "1.1.1" } 86 | 87 | 88 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 89 | # 90 | # CocoaPods is smart about how it includes source code. For source files 91 | # giving a folder will include any swift, h, m, mm, c & cpp files. 92 | # For header files it will include any header in the folder. 93 | # Not including the public_header_files will make all headers public. 94 | # 95 | 96 | s.source_files = "RevealingTableViewCell", "RevealingTableViewCell/**/*.{h,m}" 97 | s.exclude_files = "Classes/Exclude" 98 | 99 | # s.public_header_files = "Classes/**/*.h" 100 | 101 | 102 | # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 103 | # 104 | # A list of resources included with the Pod. These are copied into the 105 | # target bundle with a build phase script. Anything else will be cleaned. 106 | # You can preserve files from being cleaned, please don't preserve 107 | # non-essential files like tests, examples and documentation. 108 | # 109 | 110 | # s.resource = "icon.png" 111 | # s.resources = "Resources/*.png" 112 | 113 | # s.preserve_paths = "FilesToSave", "MoreFilesToSave" 114 | 115 | # Other stuff 116 | s.pod_target_xcconfig = { 'SWIFT_VERSION' => '5' } 117 | s.swift_version = '5' 118 | 119 | end 120 | -------------------------------------------------------------------------------- /RevealingTableViewCell.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 103D62E41E9859FE004A8D5E /* UITableView+RevealingExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 103D62E31E9859FE004A8D5E /* UITableView+RevealingExtensions.swift */; }; 11 | 1054698E1E96EBB000414B63 /* AutoLayoutTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1054698D1E96EBB000414B63 /* AutoLayoutTools.swift */; }; 12 | 10B633E41E9567F400684E93 /* RevealingTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 10B633E21E9567F400684E93 /* RevealingTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | 10B633EB1E95680000684E93 /* RevealingTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B633EA1E95680000684E93 /* RevealingTableViewCell.swift */; }; 14 | 10B633ED1E9568BA00684E93 /* DistanceHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B633EC1E9568BA00684E93 /* DistanceHelper.swift */; }; 15 | /* End PBXBuildFile section */ 16 | 17 | /* Begin PBXFileReference section */ 18 | 103D62E31E9859FE004A8D5E /* UITableView+RevealingExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView+RevealingExtensions.swift"; sourceTree = ""; }; 19 | 1054698D1E96EBB000414B63 /* AutoLayoutTools.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AutoLayoutTools.swift; sourceTree = ""; }; 20 | 108A940B1E9BF5DA00BE41B8 /* TODOs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODOs; sourceTree = ""; }; 21 | 10B633DF1E9567F400684E93 /* RevealingTableViewCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RevealingTableViewCell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 10B633E21E9567F400684E93 /* RevealingTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RevealingTableViewCell.h; sourceTree = ""; }; 23 | 10B633E31E9567F400684E93 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 24 | 10B633EA1E95680000684E93 /* RevealingTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RevealingTableViewCell.swift; sourceTree = ""; }; 25 | 10B633EC1E9568BA00684E93 /* DistanceHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DistanceHelper.swift; sourceTree = ""; }; 26 | /* End PBXFileReference section */ 27 | 28 | /* Begin PBXFrameworksBuildPhase section */ 29 | 10B633DB1E9567F400684E93 /* Frameworks */ = { 30 | isa = PBXFrameworksBuildPhase; 31 | buildActionMask = 2147483647; 32 | files = ( 33 | ); 34 | runOnlyForDeploymentPostprocessing = 0; 35 | }; 36 | /* End PBXFrameworksBuildPhase section */ 37 | 38 | /* Begin PBXGroup section */ 39 | 10B633D51E9567F400684E93 = { 40 | isa = PBXGroup; 41 | children = ( 42 | 10B633E11E9567F400684E93 /* RevealingTableViewCell */, 43 | 10B633E01E9567F400684E93 /* Products */, 44 | ); 45 | sourceTree = ""; 46 | }; 47 | 10B633E01E9567F400684E93 /* Products */ = { 48 | isa = PBXGroup; 49 | children = ( 50 | 10B633DF1E9567F400684E93 /* RevealingTableViewCell.framework */, 51 | ); 52 | name = Products; 53 | sourceTree = ""; 54 | }; 55 | 10B633E11E9567F400684E93 /* RevealingTableViewCell */ = { 56 | isa = PBXGroup; 57 | children = ( 58 | 10B633E21E9567F400684E93 /* RevealingTableViewCell.h */, 59 | 10B633E31E9567F400684E93 /* Info.plist */, 60 | 10B633EA1E95680000684E93 /* RevealingTableViewCell.swift */, 61 | 10B633EC1E9568BA00684E93 /* DistanceHelper.swift */, 62 | 1054698D1E96EBB000414B63 /* AutoLayoutTools.swift */, 63 | 103D62E31E9859FE004A8D5E /* UITableView+RevealingExtensions.swift */, 64 | 108A940B1E9BF5DA00BE41B8 /* TODOs */, 65 | ); 66 | path = RevealingTableViewCell; 67 | sourceTree = ""; 68 | }; 69 | /* End PBXGroup section */ 70 | 71 | /* Begin PBXHeadersBuildPhase section */ 72 | 10B633DC1E9567F400684E93 /* Headers */ = { 73 | isa = PBXHeadersBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | 10B633E41E9567F400684E93 /* RevealingTableViewCell.h in Headers */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | /* End PBXHeadersBuildPhase section */ 81 | 82 | /* Begin PBXNativeTarget section */ 83 | 10B633DE1E9567F400684E93 /* RevealingTableViewCell */ = { 84 | isa = PBXNativeTarget; 85 | buildConfigurationList = 10B633E71E9567F400684E93 /* Build configuration list for PBXNativeTarget "RevealingTableViewCell" */; 86 | buildPhases = ( 87 | 10B633DA1E9567F400684E93 /* Sources */, 88 | 10B633DB1E9567F400684E93 /* Frameworks */, 89 | 10B633DC1E9567F400684E93 /* Headers */, 90 | 10B633DD1E9567F400684E93 /* Resources */, 91 | ); 92 | buildRules = ( 93 | ); 94 | dependencies = ( 95 | ); 96 | name = RevealingTableViewCell; 97 | productName = RevealingTableViewCell; 98 | productReference = 10B633DF1E9567F400684E93 /* RevealingTableViewCell.framework */; 99 | productType = "com.apple.product-type.framework"; 100 | }; 101 | /* End PBXNativeTarget section */ 102 | 103 | /* Begin PBXProject section */ 104 | 10B633D61E9567F400684E93 /* Project object */ = { 105 | isa = PBXProject; 106 | attributes = { 107 | LastUpgradeCheck = 1020; 108 | ORGANIZATIONNAME = "Nikolay Suvandzhiev"; 109 | TargetAttributes = { 110 | 10B633DE1E9567F400684E93 = { 111 | CreatedOnToolsVersion = 8.3; 112 | LastSwiftMigration = 1020; 113 | ProvisioningStyle = Automatic; 114 | }; 115 | }; 116 | }; 117 | buildConfigurationList = 10B633D91E9567F400684E93 /* Build configuration list for PBXProject "RevealingTableViewCell" */; 118 | compatibilityVersion = "Xcode 9.3"; 119 | developmentRegion = en; 120 | hasScannedForEncodings = 0; 121 | knownRegions = ( 122 | en, 123 | Base, 124 | ); 125 | mainGroup = 10B633D51E9567F400684E93; 126 | productRefGroup = 10B633E01E9567F400684E93 /* Products */; 127 | projectDirPath = ""; 128 | projectRoot = ""; 129 | targets = ( 130 | 10B633DE1E9567F400684E93 /* RevealingTableViewCell */, 131 | ); 132 | }; 133 | /* End PBXProject section */ 134 | 135 | /* Begin PBXResourcesBuildPhase section */ 136 | 10B633DD1E9567F400684E93 /* Resources */ = { 137 | isa = PBXResourcesBuildPhase; 138 | buildActionMask = 2147483647; 139 | files = ( 140 | ); 141 | runOnlyForDeploymentPostprocessing = 0; 142 | }; 143 | /* End PBXResourcesBuildPhase section */ 144 | 145 | /* Begin PBXSourcesBuildPhase section */ 146 | 10B633DA1E9567F400684E93 /* Sources */ = { 147 | isa = PBXSourcesBuildPhase; 148 | buildActionMask = 2147483647; 149 | files = ( 150 | 1054698E1E96EBB000414B63 /* AutoLayoutTools.swift in Sources */, 151 | 103D62E41E9859FE004A8D5E /* UITableView+RevealingExtensions.swift in Sources */, 152 | 10B633ED1E9568BA00684E93 /* DistanceHelper.swift in Sources */, 153 | 10B633EB1E95680000684E93 /* RevealingTableViewCell.swift in Sources */, 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | /* End PBXSourcesBuildPhase section */ 158 | 159 | /* Begin XCBuildConfiguration section */ 160 | 10B633E51E9567F400684E93 /* Debug */ = { 161 | isa = XCBuildConfiguration; 162 | buildSettings = { 163 | ALWAYS_SEARCH_USER_PATHS = NO; 164 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 165 | CLANG_ANALYZER_NONNULL = YES; 166 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 167 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 168 | CLANG_CXX_LIBRARY = "libc++"; 169 | CLANG_ENABLE_MODULES = YES; 170 | CLANG_ENABLE_OBJC_ARC = YES; 171 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 172 | CLANG_WARN_BOOL_CONVERSION = YES; 173 | CLANG_WARN_COMMA = YES; 174 | CLANG_WARN_CONSTANT_CONVERSION = YES; 175 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 176 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 177 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 178 | CLANG_WARN_EMPTY_BODY = YES; 179 | CLANG_WARN_ENUM_CONVERSION = YES; 180 | CLANG_WARN_INFINITE_RECURSION = YES; 181 | CLANG_WARN_INT_CONVERSION = YES; 182 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 183 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 184 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 185 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 186 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 187 | CLANG_WARN_STRICT_PROTOTYPES = YES; 188 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 189 | CLANG_WARN_UNREACHABLE_CODE = YES; 190 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 191 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 192 | COPY_PHASE_STRIP = NO; 193 | CURRENT_PROJECT_VERSION = 1; 194 | DEBUG_INFORMATION_FORMAT = dwarf; 195 | ENABLE_STRICT_OBJC_MSGSEND = YES; 196 | ENABLE_TESTABILITY = YES; 197 | GCC_C_LANGUAGE_STANDARD = gnu99; 198 | GCC_DYNAMIC_NO_PIC = NO; 199 | GCC_NO_COMMON_BLOCKS = YES; 200 | GCC_OPTIMIZATION_LEVEL = 0; 201 | GCC_PREPROCESSOR_DEFINITIONS = ( 202 | "DEBUG=1", 203 | "$(inherited)", 204 | ); 205 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 206 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 207 | GCC_WARN_UNDECLARED_SELECTOR = YES; 208 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 209 | GCC_WARN_UNUSED_FUNCTION = YES; 210 | GCC_WARN_UNUSED_VARIABLE = YES; 211 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 212 | MTL_ENABLE_DEBUG_INFO = YES; 213 | ONLY_ACTIVE_ARCH = YES; 214 | SDKROOT = iphoneos; 215 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 216 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 217 | TARGETED_DEVICE_FAMILY = "1,2"; 218 | VERSIONING_SYSTEM = "apple-generic"; 219 | VERSION_INFO_PREFIX = ""; 220 | }; 221 | name = Debug; 222 | }; 223 | 10B633E61E9567F400684E93 /* Release */ = { 224 | isa = XCBuildConfiguration; 225 | buildSettings = { 226 | ALWAYS_SEARCH_USER_PATHS = NO; 227 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 228 | CLANG_ANALYZER_NONNULL = YES; 229 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 230 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 231 | CLANG_CXX_LIBRARY = "libc++"; 232 | CLANG_ENABLE_MODULES = YES; 233 | CLANG_ENABLE_OBJC_ARC = YES; 234 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 235 | CLANG_WARN_BOOL_CONVERSION = YES; 236 | CLANG_WARN_COMMA = YES; 237 | CLANG_WARN_CONSTANT_CONVERSION = YES; 238 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 239 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 240 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 241 | CLANG_WARN_EMPTY_BODY = YES; 242 | CLANG_WARN_ENUM_CONVERSION = YES; 243 | CLANG_WARN_INFINITE_RECURSION = YES; 244 | CLANG_WARN_INT_CONVERSION = YES; 245 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 246 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 247 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 248 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 249 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 250 | CLANG_WARN_STRICT_PROTOTYPES = YES; 251 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 252 | CLANG_WARN_UNREACHABLE_CODE = YES; 253 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 254 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 255 | COPY_PHASE_STRIP = NO; 256 | CURRENT_PROJECT_VERSION = 1; 257 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 258 | ENABLE_NS_ASSERTIONS = NO; 259 | ENABLE_STRICT_OBJC_MSGSEND = YES; 260 | GCC_C_LANGUAGE_STANDARD = gnu99; 261 | GCC_NO_COMMON_BLOCKS = YES; 262 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 263 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 264 | GCC_WARN_UNDECLARED_SELECTOR = YES; 265 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 266 | GCC_WARN_UNUSED_FUNCTION = YES; 267 | GCC_WARN_UNUSED_VARIABLE = YES; 268 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 269 | MTL_ENABLE_DEBUG_INFO = NO; 270 | SDKROOT = iphoneos; 271 | SWIFT_COMPILATION_MODE = wholemodule; 272 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 273 | TARGETED_DEVICE_FAMILY = "1,2"; 274 | VALIDATE_PRODUCT = YES; 275 | VERSIONING_SYSTEM = "apple-generic"; 276 | VERSION_INFO_PREFIX = ""; 277 | }; 278 | name = Release; 279 | }; 280 | 10B633E81E9567F400684E93 /* Debug */ = { 281 | isa = XCBuildConfiguration; 282 | buildSettings = { 283 | CLANG_ENABLE_MODULES = YES; 284 | CODE_SIGN_IDENTITY = ""; 285 | DEFINES_MODULE = YES; 286 | DYLIB_COMPATIBILITY_VERSION = 1; 287 | DYLIB_CURRENT_VERSION = 1; 288 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 289 | INFOPLIST_FILE = RevealingTableViewCell/Info.plist; 290 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 291 | LD_RUNPATH_SEARCH_PATHS = ( 292 | "$(inherited)", 293 | "@executable_path/Frameworks", 294 | "@loader_path/Frameworks", 295 | ); 296 | MARKETING_VERSION = 1.1.1; 297 | PRODUCT_BUNDLE_IDENTIFIER = com.NikolaySuvandzhiev.RevealingTableViewCell; 298 | PRODUCT_NAME = "$(TARGET_NAME)"; 299 | SKIP_INSTALL = YES; 300 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 301 | SWIFT_VERSION = 5.0; 302 | }; 303 | name = Debug; 304 | }; 305 | 10B633E91E9567F400684E93 /* Release */ = { 306 | isa = XCBuildConfiguration; 307 | buildSettings = { 308 | CLANG_ENABLE_MODULES = YES; 309 | CODE_SIGN_IDENTITY = ""; 310 | DEFINES_MODULE = YES; 311 | DYLIB_COMPATIBILITY_VERSION = 1; 312 | DYLIB_CURRENT_VERSION = 1; 313 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 314 | INFOPLIST_FILE = RevealingTableViewCell/Info.plist; 315 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 316 | LD_RUNPATH_SEARCH_PATHS = ( 317 | "$(inherited)", 318 | "@executable_path/Frameworks", 319 | "@loader_path/Frameworks", 320 | ); 321 | MARKETING_VERSION = 1.1.1; 322 | PRODUCT_BUNDLE_IDENTIFIER = com.NikolaySuvandzhiev.RevealingTableViewCell; 323 | PRODUCT_NAME = "$(TARGET_NAME)"; 324 | SKIP_INSTALL = YES; 325 | SWIFT_VERSION = 5.0; 326 | }; 327 | name = Release; 328 | }; 329 | /* End XCBuildConfiguration section */ 330 | 331 | /* Begin XCConfigurationList section */ 332 | 10B633D91E9567F400684E93 /* Build configuration list for PBXProject "RevealingTableViewCell" */ = { 333 | isa = XCConfigurationList; 334 | buildConfigurations = ( 335 | 10B633E51E9567F400684E93 /* Debug */, 336 | 10B633E61E9567F400684E93 /* Release */, 337 | ); 338 | defaultConfigurationIsVisible = 0; 339 | defaultConfigurationName = Release; 340 | }; 341 | 10B633E71E9567F400684E93 /* Build configuration list for PBXNativeTarget "RevealingTableViewCell" */ = { 342 | isa = XCConfigurationList; 343 | buildConfigurations = ( 344 | 10B633E81E9567F400684E93 /* Debug */, 345 | 10B633E91E9567F400684E93 /* Release */, 346 | ); 347 | defaultConfigurationIsVisible = 0; 348 | defaultConfigurationName = Release; 349 | }; 350 | /* End XCConfigurationList section */ 351 | }; 352 | rootObject = 10B633D61E9567F400684E93 /* Project object */; 353 | } 354 | -------------------------------------------------------------------------------- /RevealingTableViewCell.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RevealingTableViewCell.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RevealingTableViewCell.xcodeproj/xcshareddata/xcschemes/RevealingTableViewCell.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 52 | 53 | 59 | 60 | 66 | 67 | 68 | 69 | 71 | 72 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /RevealingTableViewCell/AutoLayoutTools.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AutoLayoutTools.swift 3 | // SovaTools 4 | // 5 | // Created by Nikolay Suvandzhiev on 06/04/2017. 6 | // Copyright © 2017 Nikolay Suvandzhiev. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | internal enum AutoLayoutTools 13 | { 14 | internal static func removeAllConstraints(inSuperview superview: UIView, 15 | relatingTo subview: AnyObject) 16 | { 17 | var constraintsToRemove: [NSLayoutConstraint] = [] 18 | 19 | for constraint in superview.constraints 20 | { 21 | if (constraint.firstItem === subview || constraint.secondItem === subview) 22 | { 23 | constraintsToRemove.append(constraint) 24 | 25 | } 26 | } 27 | 28 | superview.removeConstraints(constraintsToRemove) 29 | } 30 | 31 | 32 | internal static func addConstraints_equal_topBottomWidth(ofViewA viewA: UIView, 33 | toViewB viewB: UIView) 34 | { 35 | [ 36 | viewA.topAnchor.constraint(equalTo: viewB.topAnchor), 37 | viewA.bottomAnchor.constraint(equalTo: viewB.bottomAnchor), 38 | viewA.widthAnchor.constraint(equalTo: viewB.widthAnchor) 39 | ].forEach{$0.isActive = true} 40 | } 41 | 42 | 43 | internal static func addConstraint_centerX_(ofViewA viewA: UIView, 44 | toViewB viewB: UIView, 45 | constant: CGFloat) 46 | { 47 | viewA.centerXAnchor.constraint(equalTo: viewB.centerXAnchor, constant: constant).isActive = true 48 | } 49 | 50 | 51 | internal static func updateConstraint_centerX_(ofViewA viewA: UIView, 52 | toViewB viewB: UIView, 53 | constant: CGFloat) 54 | { 55 | for constraint in viewB.constraints 56 | { 57 | if constraint.firstItem === viewA 58 | && constraint.secondItem === viewB 59 | && constraint.firstAttribute == .centerX 60 | && constraint.secondAttribute == .centerX 61 | { 62 | constraint.constant = constant 63 | return 64 | } 65 | } 66 | } 67 | 68 | 69 | internal static func getConstraintsRecursively(view: UIView) -> [NSLayoutConstraint] 70 | { 71 | var allConstraints: [NSLayoutConstraint] = [] 72 | 73 | allConstraints.append(contentsOf: view.constraints) 74 | 75 | for subview in view.subviews 76 | { 77 | allConstraints.append(contentsOf: self.getConstraintsRecursively(view: subview)) 78 | } 79 | 80 | return allConstraints 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /RevealingTableViewCell/DistanceHelper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DistanceHelper.swift 3 | // RevealingTableViewCell 4 | // 5 | // Created by sovata on 05/04/2017. 6 | // Copyright © 2017 Nikolay Suvandzhiev. All rights reserved. 7 | // 8 | 9 | import QuartzCore 10 | 11 | internal enum DistanceHelper 12 | { 13 | // This is 1D 14 | internal static func getClosestX_consideringVelocity(originX: CGFloat, 15 | velocityDx: CGFloat, 16 | arrayOfX_toCheck: [CGFloat] 17 | ) -> CGFloat 18 | { 19 | guard arrayOfX_toCheck.count > 0 else 20 | { 21 | fatalError("WARNING: Not allowed to pass an empty array for `arrayOfX_toCheck`") 22 | } 23 | 24 | // The higher this is, the harder the user has to 'throw' the view to a particular position for it to 'snap' to it 25 | let factorToDivideVelocityBy: CGFloat = 20.0 26 | 27 | let pointOfOriginPlusScaledVelocity:CGFloat = originX + velocityDx/factorToDivideVelocityBy 28 | 29 | 30 | var smallestDistanceSoFar: CGFloat = CGFloat.infinity 31 | var answer_X_soFar: CGFloat = arrayOfX_toCheck[0] 32 | 33 | for X_toCheck in arrayOfX_toCheck 34 | { 35 | let distanceX = abs(pointOfOriginPlusScaledVelocity - X_toCheck) 36 | 37 | if distanceX < smallestDistanceSoFar 38 | { 39 | smallestDistanceSoFar = distanceX 40 | answer_X_soFar = X_toCheck 41 | } 42 | } 43 | 44 | return answer_X_soFar 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /RevealingTableViewCell/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /RevealingTableViewCell/RevealingTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // RevealingTableViewCell.h 3 | // RevealingTableViewCell 4 | // 5 | // Created by sovata on 05/04/2017. 6 | // Copyright © 2017 Nikolay Suvandzhiev. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for RevealingTableViewCell. 12 | FOUNDATION_EXPORT double RevealingTableViewCellVersionNumber; 13 | 14 | //! Project version string for RevealingTableViewCell. 15 | FOUNDATION_EXPORT const unsigned char RevealingTableViewCellVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /RevealingTableViewCell/TODOs: -------------------------------------------------------------------------------- 1 | INVESTIGATE: I tried using `UISpringTimingParameters` with initialVelocity vector causes the view to get offset slighly in the Y axis, even if we set the vector to have y=0. 2 | NOTE: We need to completely remove and re-add constraints during dragging and animation. Setting isActive does not work. 3 | 4 | TODO: If while dragging the orientation changes, react somehow? 5 | TODO: If the spring is animating and is outside of the allowed ranges (overshooting), when we start dragging, the view will jump. 6 | TODO: Expose the draggingResitance constants as a public API 7 | -------------------------------------------------------------------------------- /RevealingTableViewCell/UITableView+RevealingExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITableView+RevealingExtensions.swift 3 | // RevealingTableViewCell 4 | // 5 | // Created by sovata on 08/04/2017. 6 | // Copyright © 2017 Nikolay Suvandzhiev. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | 13 | /// Extension for easy closing of RevealingTableViewCells in a tableView 14 | public extension UITableView 15 | { 16 | /** 17 | Closes all the cells (unless you specify a cell to leave open). 18 | 19 | - Parameters: 20 | - cellThatShouldNotBeClosed: The cell to leave open. (optional). Just don't pass anything (or pass `nil`) if you want all the cells to close. 21 | */ 22 | func closeAllCells(exceptThisOne cellThatShouldNotBeClosed: RevealingTableViewCell? = nil) 23 | { 24 | for visibleCell in self.visibleCells 25 | { 26 | if let revealingTableViewCell = visibleCell as? RevealingTableViewCell 27 | { 28 | if let cellThatShouldNotBeClosed = cellThatShouldNotBeClosed 29 | { 30 | if visibleCell != cellThatShouldNotBeClosed 31 | { 32 | revealingTableViewCell.setRevealingState(.closed, animated: true) 33 | } 34 | } 35 | else 36 | { 37 | revealingTableViewCell.setRevealingState(.closed, animated: true) 38 | } 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Screenshots/IBOutlets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/Screenshots/IBOutlets.png -------------------------------------------------------------------------------- /Screenshots/RevealingCellScreenRecording10s.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/Screenshots/RevealingCellScreenRecording10s.gif -------------------------------------------------------------------------------- /Screenshots/ViewStructure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/Screenshots/ViewStructure.png -------------------------------------------------------------------------------- /Screenshots/app_icon_pivotlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/Screenshots/app_icon_pivotlist.png -------------------------------------------------------------------------------- /docs/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

Classes

63 |

The following classes are available globally.

64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 |
    71 | 72 | 73 | 74 | RevealingTableViewCell 75 | 76 |
    77 |
    78 |
    79 |
    80 |
    81 |
    82 |

    A UITableViewCell subclass that can be swiped to reveal content udnerneath it’s main view

    83 | 84 | See more 85 |
    86 |
    87 |

    Declaration

    88 |
    89 |

    Swift

    90 |
    open class RevealingTableViewCell : UITableViewCell
    91 | 92 |
    93 |
    94 |
    95 |
    96 |
  • 97 |
98 |
99 |
100 |
101 | 105 |
106 |
107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/Classes/RevealingTableViewCell/RevealingState.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RevealingState Enumeration Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

RevealingState

63 |
64 |
65 |
public enum RevealingState
66 | 67 |
68 |
69 |

Describes the state of a RevealingTableViewCell

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | closed 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    The default state (none of the views underneath are revealed)

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    case closed
    96 | 97 |
    98 |
    99 |
    100 |
    101 |
  • 102 |
  • 103 |
    104 | 105 | 106 | 107 | openLeft 108 | 109 |
    110 |
    111 |
    112 |
    113 |
    114 |
    115 |

    When uiView_revealedContent_left is revealed

    116 | 117 |
    118 |
    119 |

    Declaration

    120 |
    121 |

    Swift

    122 |
    case openLeft
    123 | 124 |
    125 |
    126 |
    127 |
    128 |
  • 129 |
  • 130 |
    131 | 132 | 133 | 134 | openRight 135 | 136 |
    137 |
    138 |
    139 |
    140 |
    141 |
    142 |

    When uiView_revealedContent_right is revealed

    143 | 144 |
    145 |
    146 |

    Declaration

    147 |
    148 |

    Swift

    149 |
    case openRight
    150 | 151 |
    152 |
    153 |
    154 |
    155 |
  • 156 |
157 |
158 |
159 |
160 | 164 |
165 |
166 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /docs/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

Extensions

63 |

The following extensions are available globally.

64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 |
    71 | 72 | 73 | 74 | UITableView 75 | 76 |
    77 |
    78 |
    79 |
    80 |
    81 |
    82 |

    Extension for easy closing of RevealingTableViewCells in a tableView

    83 | 84 | See more 85 |
    86 |
    87 |

    Declaration

    88 |
    89 |

    Swift

    90 |
    public extension UITableView
    91 | 92 |
    93 |
    94 |
    95 |
    96 |
  • 97 |
98 |
99 |
100 |
101 | 105 |
106 |
107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/Extensions/UITableView.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | UITableView Extension Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

UITableView

63 |
64 |
65 |
public extension UITableView
66 | 67 |
68 |
69 |

Extension for easy closing of RevealingTableViewCells in a tableView

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | closeAllCells(exceptThisOne:) 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    Closes all the cells (unless you specify a cell to leave open).

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    func closeAllCells(exceptThisOne cellThatShouldNotBeClosed: RevealingTableViewCell? = nil)
    96 | 97 |
    98 |
    99 |
    100 |

    Parameters

    101 | 102 | 103 | 104 | 109 | 114 | 115 | 116 |
    105 | 106 | cellThatShouldNotBeClosed 107 | 108 | 110 |
    111 |

    The cell to leave open. (optional). Just don’t pass anything (or pass nil) if you want all the cells to close.

    112 |
    113 |
    117 |
    118 |
    119 |
    120 |
  • 121 |
122 |
123 |
124 |
125 | 129 |
130 |
131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /docs/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

Protocols

63 |

The following protocols are available globally.

64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 |
    71 | 72 | 73 | 74 | RevealingTableViewCellDelegate 75 | 76 |
    77 |
    78 |
    79 |
    80 |
    81 |
    82 |

    Delegate for the RevealingTableViewCell

    83 | 84 | See more 85 |
    86 |
    87 |

    Declaration

    88 |
    89 |

    Swift

    90 |
    public protocol RevealingTableViewCellDelegate : AnyObject
    91 | 92 |
    93 |
    94 |
    95 |
    96 |
  • 97 |
98 |
99 |
100 |
101 | 105 |
106 |
107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/Protocols/RevealingTableViewCellDelegate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RevealingTableViewCellDelegate Protocol Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

RevealingTableViewCellDelegate

63 |
64 |
65 |
public protocol RevealingTableViewCellDelegate : AnyObject
66 | 67 |
68 |
69 |

Delegate for the RevealingTableViewCell

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | didChangeRevealingState(cell:) 81 | 82 | 83 | Default implementation 84 | 85 |
    86 |
    87 |
    88 |
    89 |
    90 |
    91 |

    This is called when the state changes and if there is an animation, it is called at the start of the animation.

    92 | 93 |
    94 |

    Default Implementation

    95 |
    96 | 97 |
    98 |
    99 |

    Declaration

    100 |
    101 |

    Swift

    102 |
    func didChangeRevealingState(cell: RevealingTableViewCell)
    103 | 104 |
    105 |
    106 |
    107 |

    Parameters

    108 | 109 | 110 | 111 | 116 | 121 | 122 | 123 |
    112 | 113 | cell 114 | 115 | 117 |
    118 |

    The cell in question

    119 |
    120 |
    124 |
    125 |
    126 |
    127 |
  • 128 |
  • 129 |
    130 | 131 | 132 | 133 | didStartPanGesture(cell:) 134 | 135 | 136 | Default implementation 137 | 138 |
    139 |
    140 |
    141 |
    142 |
    143 |
    144 |

    Called when the user sarts horizontally sliding the cell.

    145 | 146 |
    147 |

    Default Implementation

    148 |
    149 | 150 |
    151 |
    152 |

    Declaration

    153 |
    154 |

    Swift

    155 |
    func didStartPanGesture(cell: RevealingTableViewCell)
    156 | 157 |
    158 |
    159 |
    160 |

    Parameters

    161 | 162 | 163 | 164 | 169 | 174 | 175 | 176 |
    165 | 166 | cell 167 | 168 | 170 |
    171 |

    The cell in question

    172 |
    173 |
    177 |
    178 |
    179 |
    180 |
  • 181 |
  • 182 |
    183 | 184 | 185 | 186 | didFinishAnimatingInState(cell:revealingState:) 187 | 188 | 189 | Default implementation 190 | 191 |
    192 |
    193 |
    194 |
    195 |
    196 |
    197 |

    Called at the end of an animation.

    198 | 199 |
    200 |

    Default Implementation

    201 |
    202 | 203 |
    204 |
    205 |

    Declaration

    206 |
    207 |

    Swift

    208 |
    func didFinishAnimatingInState(cell: RevealingTableViewCell, revealingState: RevealingTableViewCell.RevealingState)
    209 | 210 |
    211 |
    212 |
    213 |

    Parameters

    214 | 215 | 216 | 217 | 222 | 227 | 228 | 229 | 234 | 239 | 240 | 241 |
    218 | 219 | cell 220 | 221 | 223 |
    224 |

    The cell in question

    225 |
    226 |
    230 | 231 | revealingState 232 | 233 | 235 |
    236 |

    The RevealingState at which the animation ended

    237 |
    238 |
    242 |
    243 |
    244 |
    245 |
  • 246 |
247 |
248 |
249 |
250 | 254 |
255 |
256 | 257 | 258 | 259 | -------------------------------------------------------------------------------- /docs/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | 173 | .section { 174 | padding: 0 25px; } 175 | 176 | .highlight { 177 | background-color: #eee; 178 | padding: 10px 12px; 179 | border: 1px solid #e2e2e2; 180 | border-radius: 4px; 181 | overflow-x: auto; } 182 | 183 | .declaration .highlight { 184 | overflow-x: initial; 185 | padding: 0 40px 40px 0; 186 | margin-bottom: -25px; 187 | background-color: transparent; 188 | border: none; } 189 | 190 | .section-name { 191 | margin: 0; 192 | margin-left: 18px; } 193 | 194 | .task-group-section { 195 | padding-left: 6px; 196 | border-top: 1px solid #e2e2e2; } 197 | 198 | .task-group { 199 | padding-top: 0px; } 200 | 201 | .task-name-container a[name]:before { 202 | content: ""; 203 | display: block; 204 | padding-top: 70px; 205 | margin: -70px 0 0; } 206 | 207 | .item { 208 | padding-top: 8px; 209 | width: 100%; 210 | list-style-type: none; } 211 | .item a[name]:before { 212 | content: ""; 213 | display: block; 214 | padding-top: 70px; 215 | margin: -70px 0 0; } 216 | .item code { 217 | background-color: transparent; 218 | padding: 0; } 219 | .item .token, .item .direct-link { 220 | padding-left: 3px; 221 | margin-left: 15px; 222 | font-size: 11.9px; 223 | transition: all 300ms; } 224 | .item .token-open { 225 | margin-left: 0px; } 226 | .item .discouraged { 227 | text-decoration: line-through; } 228 | .item .declaration-note { 229 | font-size: .85em; 230 | color: gray; 231 | font-style: italic; } 232 | 233 | .pointer-container { 234 | border-bottom: 1px solid #e2e2e2; 235 | left: -23px; 236 | padding-bottom: 13px; 237 | position: relative; 238 | width: 110%; } 239 | 240 | .pointer { 241 | background: #f9f9f9; 242 | border-left: 1px solid #e2e2e2; 243 | border-top: 1px solid #e2e2e2; 244 | height: 12px; 245 | left: 21px; 246 | top: -7px; 247 | -webkit-transform: rotate(45deg); 248 | -moz-transform: rotate(45deg); 249 | -o-transform: rotate(45deg); 250 | transform: rotate(45deg); 251 | position: absolute; 252 | width: 12px; } 253 | 254 | .height-container { 255 | display: none; 256 | left: -25px; 257 | padding: 0 25px; 258 | position: relative; 259 | width: 100%; 260 | overflow: hidden; } 261 | .height-container .section { 262 | background: #f9f9f9; 263 | border-bottom: 1px solid #e2e2e2; 264 | left: -25px; 265 | position: relative; 266 | width: 100%; 267 | padding-top: 10px; 268 | padding-bottom: 5px; } 269 | 270 | .aside, .language { 271 | padding: 6px 12px; 272 | margin: 12px 0; 273 | border-left: 5px solid #dddddd; 274 | overflow-y: hidden; } 275 | .aside .aside-title, .language .aside-title { 276 | font-size: 9px; 277 | letter-spacing: 2px; 278 | text-transform: uppercase; 279 | padding-bottom: 0; 280 | margin: 0; 281 | color: #aaa; 282 | -webkit-user-select: none; } 283 | .aside p:last-child, .language p:last-child { 284 | margin-bottom: 0; } 285 | 286 | .language { 287 | border-left: 5px solid #cde9f4; } 288 | .language .aside-title { 289 | color: #4b8afb; } 290 | 291 | .aside-warning, .aside-deprecated, .aside-unavailable { 292 | border-left: 5px solid #ff6666; } 293 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 294 | color: #ff0000; } 295 | 296 | .graybox { 297 | border-collapse: collapse; 298 | width: 100%; } 299 | .graybox p { 300 | margin: 0; 301 | word-break: break-word; 302 | min-width: 50px; } 303 | .graybox td { 304 | border: 1px solid #e2e2e2; 305 | padding: 5px 25px 5px 10px; 306 | vertical-align: middle; } 307 | .graybox tr td:first-of-type { 308 | text-align: right; 309 | padding: 7px; 310 | vertical-align: top; 311 | word-break: normal; 312 | width: 40px; } 313 | 314 | .slightly-smaller { 315 | font-size: 0.9em; } 316 | 317 | #footer { 318 | position: relative; 319 | top: 10px; 320 | bottom: 0px; 321 | margin-left: 25px; } 322 | #footer p { 323 | margin: 0; 324 | color: #aaa; 325 | font-size: 0.8em; } 326 | 327 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 328 | display: none; } 329 | 330 | html.dash .main-content { 331 | width: 980px; 332 | margin-left: 0; 333 | border: none; 334 | width: 100%; 335 | top: 0; 336 | padding-bottom: 0; } 337 | 338 | html.dash .height-container { 339 | display: block; } 340 | 341 | html.dash .item .token { 342 | margin-left: 0; } 343 | 344 | html.dash .content-wrapper { 345 | width: auto; } 346 | 347 | html.dash #footer { 348 | position: static; } 349 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy.revealingtableviewcell 7 | CFBundleName 8 | RevealingTableViewCell 9 | DocSetPlatformFamily 10 | revealingtableviewcell 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

Classes

63 |

The following classes are available globally.

64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 |
    71 | 72 | 73 | 74 | RevealingTableViewCell 75 | 76 |
    77 |
    78 |
    79 |
    80 |
    81 |
    82 |

    A UITableViewCell subclass that can be swiped to reveal content udnerneath it’s main view

    83 | 84 | See more 85 |
    86 |
    87 |

    Declaration

    88 |
    89 |

    Swift

    90 |
    open class RevealingTableViewCell : UITableViewCell
    91 | 92 |
    93 |
    94 |
    95 |
    96 |
  • 97 |
98 |
99 |
100 |
101 | 105 |
106 |
107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/Classes/RevealingTableViewCell/RevealingState.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RevealingState Enumeration Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

RevealingState

63 |
64 |
65 |
public enum RevealingState
66 | 67 |
68 |
69 |

Describes the state of a RevealingTableViewCell

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | closed 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    The default state (none of the views underneath are revealed)

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    case closed
    96 | 97 |
    98 |
    99 |
    100 |
    101 |
  • 102 |
  • 103 |
    104 | 105 | 106 | 107 | openLeft 108 | 109 |
    110 |
    111 |
    112 |
    113 |
    114 |
    115 |

    When uiView_revealedContent_left is revealed

    116 | 117 |
    118 |
    119 |

    Declaration

    120 |
    121 |

    Swift

    122 |
    case openLeft
    123 | 124 |
    125 |
    126 |
    127 |
    128 |
  • 129 |
  • 130 |
    131 | 132 | 133 | 134 | openRight 135 | 136 |
    137 |
    138 |
    139 |
    140 |
    141 |
    142 |

    When uiView_revealedContent_right is revealed

    143 | 144 |
    145 |
    146 |

    Declaration

    147 |
    148 |

    Swift

    149 |
    case openRight
    150 | 151 |
    152 |
    153 |
    154 |
    155 |
  • 156 |
157 |
158 |
159 |
160 | 164 |
165 |
166 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

Extensions

63 |

The following extensions are available globally.

64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 |
    71 | 72 | 73 | 74 | UITableView 75 | 76 |
    77 |
    78 |
    79 |
    80 |
    81 |
    82 |

    Extension for easy closing of RevealingTableViewCells in a tableView

    83 | 84 | See more 85 |
    86 |
    87 |

    Declaration

    88 |
    89 |

    Swift

    90 |
    public extension UITableView
    91 | 92 |
    93 |
    94 |
    95 |
    96 |
  • 97 |
98 |
99 |
100 |
101 | 105 |
106 |
107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/Extensions/UITableView.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | UITableView Extension Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

UITableView

63 |
64 |
65 |
public extension UITableView
66 | 67 |
68 |
69 |

Extension for easy closing of RevealingTableViewCells in a tableView

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | closeAllCells(exceptThisOne:) 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    Closes all the cells (unless you specify a cell to leave open).

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    func closeAllCells(exceptThisOne cellThatShouldNotBeClosed: RevealingTableViewCell? = nil)
    96 | 97 |
    98 |
    99 |
    100 |

    Parameters

    101 | 102 | 103 | 104 | 109 | 114 | 115 | 116 |
    105 | 106 | cellThatShouldNotBeClosed 107 | 108 | 110 |
    111 |

    The cell to leave open. (optional). Just don’t pass anything (or pass nil) if you want all the cells to close.

    112 |
    113 |
    117 |
    118 |
    119 |
    120 |
  • 121 |
122 |
123 |
124 |
125 | 129 |
130 |
131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

Protocols

63 |

The following protocols are available globally.

64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 |
    71 | 72 | 73 | 74 | RevealingTableViewCellDelegate 75 | 76 |
    77 |
    78 |
    79 |
    80 |
    81 |
    82 |

    Delegate for the RevealingTableViewCell

    83 | 84 | See more 85 |
    86 |
    87 |

    Declaration

    88 |
    89 |

    Swift

    90 |
    public protocol RevealingTableViewCellDelegate : AnyObject
    91 | 92 |
    93 |
    94 |
    95 |
    96 |
  • 97 |
98 |
99 |
100 |
101 | 105 |
106 |
107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/Protocols/RevealingTableViewCellDelegate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RevealingTableViewCellDelegate Protocol Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

RevealingTableViewCell Docs (100% documented)

18 |
19 |
20 |
21 | 26 |
27 |
28 | 59 |
60 |
61 |
62 |

RevealingTableViewCellDelegate

63 |
64 |
65 |
public protocol RevealingTableViewCellDelegate : AnyObject
66 | 67 |
68 |
69 |

Delegate for the RevealingTableViewCell

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | didChangeRevealingState(cell:) 81 | 82 | 83 | Default implementation 84 | 85 |
    86 |
    87 |
    88 |
    89 |
    90 |
    91 |

    This is called when the state changes and if there is an animation, it is called at the start of the animation.

    92 | 93 |
    94 |

    Default Implementation

    95 |
    96 | 97 |
    98 |
    99 |

    Declaration

    100 |
    101 |

    Swift

    102 |
    func didChangeRevealingState(cell: RevealingTableViewCell)
    103 | 104 |
    105 |
    106 |
    107 |

    Parameters

    108 | 109 | 110 | 111 | 116 | 121 | 122 | 123 |
    112 | 113 | cell 114 | 115 | 117 |
    118 |

    The cell in question

    119 |
    120 |
    124 |
    125 |
    126 |
    127 |
  • 128 |
  • 129 |
    130 | 131 | 132 | 133 | didStartPanGesture(cell:) 134 | 135 | 136 | Default implementation 137 | 138 |
    139 |
    140 |
    141 |
    142 |
    143 |
    144 |

    Called when the user sarts horizontally sliding the cell.

    145 | 146 |
    147 |

    Default Implementation

    148 |
    149 | 150 |
    151 |
    152 |

    Declaration

    153 |
    154 |

    Swift

    155 |
    func didStartPanGesture(cell: RevealingTableViewCell)
    156 | 157 |
    158 |
    159 |
    160 |

    Parameters

    161 | 162 | 163 | 164 | 169 | 174 | 175 | 176 |
    165 | 166 | cell 167 | 168 | 170 |
    171 |

    The cell in question

    172 |
    173 |
    177 |
    178 |
    179 |
    180 |
  • 181 |
  • 182 |
    183 | 184 | 185 | 186 | didFinishAnimatingInState(cell:revealingState:) 187 | 188 | 189 | Default implementation 190 | 191 |
    192 |
    193 |
    194 |
    195 |
    196 |
    197 |

    Called at the end of an animation.

    198 | 199 |
    200 |

    Default Implementation

    201 |
    202 | 203 |
    204 |
    205 |

    Declaration

    206 |
    207 |

    Swift

    208 |
    func didFinishAnimatingInState(cell: RevealingTableViewCell, revealingState: RevealingTableViewCell.RevealingState)
    209 | 210 |
    211 |
    212 |
    213 |

    Parameters

    214 | 215 | 216 | 217 | 222 | 227 | 228 | 229 | 234 | 239 | 240 | 241 |
    218 | 219 | cell 220 | 221 | 223 |
    224 |

    The cell in question

    225 |
    226 |
    230 | 231 | revealingState 232 | 233 | 235 |
    236 |

    The RevealingState at which the animation ended

    237 |
    238 |
    242 |
    243 |
    244 |
    245 |
  • 246 |
247 |
248 |
249 |
250 | 254 |
255 |
256 | 257 | 258 | 259 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/badge.svg: -------------------------------------------------------------------------------- 1 | documentationdocumentation100%100% -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 1; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 1; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | 173 | .section { 174 | padding: 0 25px; } 175 | 176 | .highlight { 177 | background-color: #eee; 178 | padding: 10px 12px; 179 | border: 1px solid #e2e2e2; 180 | border-radius: 4px; 181 | overflow-x: auto; } 182 | 183 | .declaration .highlight { 184 | overflow-x: initial; 185 | padding: 0 40px 40px 0; 186 | margin-bottom: -25px; 187 | background-color: transparent; 188 | border: none; } 189 | 190 | .section-name { 191 | margin: 0; 192 | margin-left: 18px; } 193 | 194 | .task-group-section { 195 | padding-left: 6px; 196 | border-top: 1px solid #e2e2e2; } 197 | 198 | .task-group { 199 | padding-top: 0px; } 200 | 201 | .task-name-container a[name]:before { 202 | content: ""; 203 | display: block; 204 | padding-top: 70px; 205 | margin: -70px 0 0; } 206 | 207 | .item { 208 | padding-top: 8px; 209 | width: 100%; 210 | list-style-type: none; } 211 | .item a[name]:before { 212 | content: ""; 213 | display: block; 214 | padding-top: 70px; 215 | margin: -70px 0 0; } 216 | .item code { 217 | background-color: transparent; 218 | padding: 0; } 219 | .item .token, .item .direct-link { 220 | padding-left: 3px; 221 | margin-left: 15px; 222 | font-size: 11.9px; 223 | transition: all 300ms; } 224 | .item .token-open { 225 | margin-left: 0px; } 226 | .item .discouraged { 227 | text-decoration: line-through; } 228 | .item .declaration-note { 229 | font-size: .85em; 230 | color: gray; 231 | font-style: italic; } 232 | 233 | .pointer-container { 234 | border-bottom: 1px solid #e2e2e2; 235 | left: -23px; 236 | padding-bottom: 13px; 237 | position: relative; 238 | width: 110%; } 239 | 240 | .pointer { 241 | background: #f9f9f9; 242 | border-left: 1px solid #e2e2e2; 243 | border-top: 1px solid #e2e2e2; 244 | height: 12px; 245 | left: 21px; 246 | top: -7px; 247 | -webkit-transform: rotate(45deg); 248 | -moz-transform: rotate(45deg); 249 | -o-transform: rotate(45deg); 250 | transform: rotate(45deg); 251 | position: absolute; 252 | width: 12px; } 253 | 254 | .height-container { 255 | display: none; 256 | left: -25px; 257 | padding: 0 25px; 258 | position: relative; 259 | width: 100%; 260 | overflow: hidden; } 261 | .height-container .section { 262 | background: #f9f9f9; 263 | border-bottom: 1px solid #e2e2e2; 264 | left: -25px; 265 | position: relative; 266 | width: 100%; 267 | padding-top: 10px; 268 | padding-bottom: 5px; } 269 | 270 | .aside, .language { 271 | padding: 6px 12px; 272 | margin: 12px 0; 273 | border-left: 5px solid #dddddd; 274 | overflow-y: hidden; } 275 | .aside .aside-title, .language .aside-title { 276 | font-size: 9px; 277 | letter-spacing: 2px; 278 | text-transform: uppercase; 279 | padding-bottom: 0; 280 | margin: 0; 281 | color: #aaa; 282 | -webkit-user-select: none; } 283 | .aside p:last-child, .language p:last-child { 284 | margin-bottom: 0; } 285 | 286 | .language { 287 | border-left: 5px solid #cde9f4; } 288 | .language .aside-title { 289 | color: #4b8afb; } 290 | 291 | .aside-warning, .aside-deprecated, .aside-unavailable { 292 | border-left: 5px solid #ff6666; } 293 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 294 | color: #ff0000; } 295 | 296 | .graybox { 297 | border-collapse: collapse; 298 | width: 100%; } 299 | .graybox p { 300 | margin: 0; 301 | word-break: break-word; 302 | min-width: 50px; } 303 | .graybox td { 304 | border: 1px solid #e2e2e2; 305 | padding: 5px 25px 5px 10px; 306 | vertical-align: middle; } 307 | .graybox tr td:first-of-type { 308 | text-align: right; 309 | padding: 7px; 310 | vertical-align: top; 311 | word-break: normal; 312 | width: 40px; } 313 | 314 | .slightly-smaller { 315 | font-size: 0.9em; } 316 | 317 | #footer { 318 | position: relative; 319 | top: 10px; 320 | bottom: 0px; 321 | margin-left: 25px; } 322 | #footer p { 323 | margin: 0; 324 | color: #aaa; 325 | font-size: 0.8em; } 326 | 327 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 328 | display: none; } 329 | 330 | html.dash .main-content { 331 | width: 980px; 332 | margin-left: 0; 333 | border: none; 334 | width: 100%; 335 | top: 0; 336 | padding-bottom: 0; } 337 | 338 | html.dash .height-container { 339 | display: block; } 340 | 341 | html.dash .item .token { 342 | margin-left: 0; } 343 | 344 | html.dash .content-wrapper { 345 | width: auto; } 346 | 347 | html.dash #footer { 348 | position: static; } 349 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RevealingTableViewCell Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

RevealingTableViewCell Docs (100% documented)

17 |
18 |
19 |
20 | 25 |
26 |
27 | 58 |
59 |
60 |
61 | 62 |

RevealingTableViewCell

63 | 64 |

Travis CocoaPods Carthage compatible 65 | license MIT 66 | Swift 4.2

67 | 68 |
69 | 70 |

71 | What is it? 72 | • 73 | Check it out 74 | • 75 | Installation 76 | • 77 | Usage 78 | • 79 | Documentation 80 |

81 |

What is it?

82 | 83 |

RevealingTableViewCell is a UITableViewCell that can be swiped to reveal content underneath its main view.

84 | 85 |
    86 |
  • Zero-code setup: RevealingTableViewCell can be set up through Interface Builder, with no code changes.
  • 87 |
  • ‘Bring your own views’ - Note that RevealingTableViewCell does not provide anything other than the sliding view - it’s up to you to set up any views that need be revealed, e.g. buttons etc.)
  • 88 |
89 | 90 |


91 | 92 |

93 |

Check it out

94 |

CocoaPods

95 |
pod try RevealingTableViewCell
 96 | 
97 | 98 |

(this command clones the example project in a temporary folder and opens it in Xcode)

99 |

Directly from the repo

100 | 101 |

Clone or download this repository and then open Example/RevealingTableViewCellExample.xcodeproj.

102 |

Demo video

103 | 104 |

Click to see an example

107 | 108 |

(opens in YouTube)

109 |

Installation

110 | 111 |

Requires: iOS 10 +

112 | 113 |
pod 'RevealingTableViewCell'
114 | 
115 |

Carthage

116 |
github "sovata8/RevealingTableViewCell"
117 | 
118 |

Usage

119 | 120 |

No code changes required, everything is done in Interface Builder.
121 | Note that this framework does not provide anything other than the sliding view - it’s up to you to set up any views that need be revealed (e.g. buttons, additional information etc.).

122 | 123 |

These screenshots show how to set up your views and IBOutlets:

124 | 125 |

126 | 127 |

128 |

Step 1

129 | 130 |

Use RevealingTableViewCell (or your subclass of it) as a custom class for your tableview cell in Interface Builder.

131 |

Step 2

132 | 133 |

Inside the cell’s default contentView, put a subview and connect it to the the IBOutlet uiView_mainContent. This will be the view that slides sideways to reveal some content underneath. Using AutoLayout, pin this uiView_mainContent to it’s superview (the contentView) using the following constraints:

134 | 135 |

uiView_mainContent.centerX = superview.centerX 136 | uiView_mainContent.width = superview.width 137 | uiView_mainContent.height = superview.height 138 | uiView_mainContent.centerY = superview.centerY

139 | 140 |

(or instead of the height and centerY constraints, you can use top and bottom constraints)

141 |

Step 3

142 | 143 |

Inside the cell’s default contentView, put and connect uiView_revealedContent_left and/or uiView_revealedContent_right subviews. Pin them using AutoLayout to the corresponding sides of your cell. Fix their widths. Make sure they are behind the uiView_mainContent.

144 |

Step 4

145 | 146 |

That’s all - run your app!

147 |

Making the cells close when needed (optional)

148 | 149 |

Usually, you would want cells to automatically close whenever you scroll the tableview, or when another cell is swiped sideways. To achieve this, use the provided tableview extension function closeAllCells(exceptThisOne:). Here is an example (from the example project):

150 |
// Close all cells when the tableview starts scrolling vertically
151 | extension ViewController: UIScrollViewDelegate
152 | {
153 |     func scrollViewDidScroll(_ scrollView: UIScrollView)
154 |     {
155 |         self.uiTableView.closeAllCells()
156 |     }
157 | }
158 | 
159 |
// Close all other cells when a particular cell starts being swiped
160 | extension ViewController: RevealingTableViewCellDelegate
161 | {
162 |     func didStartPanGesture(cell: RevealingTableViewCell)
163 |     {
164 |         self.uiTableView.closeAllCells(exceptThisOne: cell)
165 |     }
166 | }
167 | 
168 | 169 |

(of course when you are creating the cell in your cellForRowAt indexPath logic, don’t forget to set the delegate like this: cell.revealingCellDelegate = self)

170 |

Documentation

171 | 172 |

Check out the auto-generated Documentation.
173 | (If you’re reading this on GitHub, and the above link opens the html source, try this)

174 |

Used by

175 | 176 |

PivotList Logo
177 | PivotList

178 | 179 |

Please let me know if you use RevealingTableViewCell in your app and would like to be mentioned here. (either email me or create e new issue with the usedby label)

180 |

Known limitations and considerations

181 | 182 |

The way this library works requires that all the ‘hidden’ views (the ones that are behind the main view and are revealed when sliding), are in the view hierarchy of the cell at all times, even if they are never shown. This is obviously not great when performance matters.

183 |

License

184 | 185 |

This project is licensed under the terms of the MIT license. See the LICENSE file.

186 | 187 |
188 |
189 | 193 |
194 |
195 | 196 | 197 | 198 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`.token[href="${location.hash}"]`); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/search.json: -------------------------------------------------------------------------------- 1 | {"Protocols/RevealingTableViewCellDelegate.html#/s:22RevealingTableViewCell0abcD8DelegateP09didChangeA5State4cellyA2AC_tF":{"name":"didChangeRevealingState(cell:)","abstract":"

This is called when the state changes and if there is an animation, it is called at the start of the animation.

","parent_name":"RevealingTableViewCellDelegate"},"Protocols/RevealingTableViewCellDelegate.html#/s:22RevealingTableViewCell0abcD8DelegateP18didStartPanGesture4cellyA2AC_tF":{"name":"didStartPanGesture(cell:)","abstract":"

Called when the user sarts horizontally sliding the cell.

","parent_name":"RevealingTableViewCellDelegate"},"Protocols/RevealingTableViewCellDelegate.html#/s:22RevealingTableViewCell0abcD8DelegateP25didFinishAnimatingInState4cell09revealingJ0yA2AC_AG0aJ0OtF":{"name":"didFinishAnimatingInState(cell:revealingState:)","abstract":"

Called at the end of an animation.

","parent_name":"RevealingTableViewCellDelegate"},"Protocols/RevealingTableViewCellDelegate.html":{"name":"RevealingTableViewCellDelegate","abstract":"

Delegate for the RevealingTableViewCell

"},"Extensions/UITableView.html#/s:So11UITableViewC014RevealingTableB4CellE13closeAllCells13exceptThisOneyA2CCSg_tF":{"name":"closeAllCells(exceptThisOne:)","abstract":"

Closes all the cells (unless you specify a cell to leave open).

","parent_name":"UITableView"},"Extensions/UITableView.html":{"name":"UITableView","abstract":"

Extension for easy closing of RevealingTableViewCells in a tableView

"},"Classes/RevealingTableViewCell/RevealingState.html#/s:22RevealingTableViewCellAAC0A5StateO6closedyA2DmF":{"name":"closed","abstract":"

The default state (none of the views underneath are revealed)

","parent_name":"RevealingState"},"Classes/RevealingTableViewCell/RevealingState.html#/s:22RevealingTableViewCellAAC0A5StateO8openLeftyA2DmF":{"name":"openLeft","abstract":"

When uiView_revealedContent_left is revealed

","parent_name":"RevealingState"},"Classes/RevealingTableViewCell/RevealingState.html#/s:22RevealingTableViewCellAAC0A5StateO9openRightyA2DmF":{"name":"openRight","abstract":"

When uiView_revealedContent_right is revealed

","parent_name":"RevealingState"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(py)uiView_revealedContent_left":{"name":"uiView_revealedContent_left","abstract":"

The content to be revealed, pinned to the left of the cell’s contentView. Optional.

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(py)uiView_revealedContent_right":{"name":"uiView_revealedContent_right","abstract":"

The content to be revealed, pinned to the right of the cell’s contentView. Optional.

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(py)uiView_mainContent":{"name":"uiView_mainContent","abstract":"

This will be the view that slides sideways to reveal some content underneath. It needs to be pinned to the cell’s contentView using the layoutConstraint (among others).

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell/RevealingState.html":{"name":"RevealingState","abstract":"

Describes the state of a RevealingTableViewCell

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/s:22RevealingTableViewCellAAC14revealingStateAB0aF0Ovp":{"name":"revealingState","abstract":"

The cell’s current revealing state

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/s:22RevealingTableViewCellAAC03setA5State_8animatedyAB0aF0O_SbtF":{"name":"setRevealingState(_:animated:)","abstract":"

Sets the cell’s revealing state with an optional animation.

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/s:22RevealingTableViewCellAAC09revealingD8DelegateAA0abcdF0_pSgvp":{"name":"revealingCellDelegate","abstract":"

Delegate for the RevealingTableViewCell

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(im)awakeFromNib":{"name":"awakeFromNib()","abstract":"

Documented in: NSObject

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(im)prepareForReuse":{"name":"prepareForReuse()","abstract":"

Documented in: UITableViewCell

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@CM@RevealingTableViewCell@objc(cs)RevealingTableViewCell(im)gestureRecognizerShouldBegin:":{"name":"gestureRecognizerShouldBegin(_:)","abstract":"

Documented in: UIGestureRecognizerDelegate

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html":{"name":"RevealingTableViewCell","abstract":"

A UITableViewCell subclass that can be swiped to reveal content udnerneath it’s main view

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"}} -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/Documents/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/nikolaysuvandzhiev/Documents/MyGithubRepos/RevealingTableViewCell" 6 | } -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/docsets/RevealingTableViewCell.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/docsets/RevealingTableViewCell.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/docsets/RevealingTableViewCell.tgz -------------------------------------------------------------------------------- /docs/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/img/carat.png -------------------------------------------------------------------------------- /docs/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/img/dash.png -------------------------------------------------------------------------------- /docs/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sovata8/RevealingTableViewCell/d3c3a3ff3b3c35718b8012a979b955530e54a616/docs/img/gh.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RevealingTableViewCell Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 |

RevealingTableViewCell Docs (100% documented)

17 |
18 |
19 |
20 | 25 |
26 |
27 | 58 |
59 |
60 |
61 | 62 |

RevealingTableViewCell

63 | 64 |

Travis CocoaPods Carthage compatible 65 | license MIT 66 | Swift 4.2

67 | 68 |
69 | 70 |

71 | What is it? 72 | • 73 | Check it out 74 | • 75 | Installation 76 | • 77 | Usage 78 | • 79 | Documentation 80 |

81 |

What is it?

82 | 83 |

RevealingTableViewCell is a UITableViewCell that can be swiped to reveal content underneath its main view.

84 | 85 |
    86 |
  • Zero-code setup: RevealingTableViewCell can be set up through Interface Builder, with no code changes.
  • 87 |
  • ‘Bring your own views’ - Note that RevealingTableViewCell does not provide anything other than the sliding view - it’s up to you to set up any views that need be revealed, e.g. buttons etc.)
  • 88 |
89 | 90 |


91 | 92 |

93 |

Check it out

94 |

CocoaPods

95 |
pod try RevealingTableViewCell
 96 | 
97 | 98 |

(this command clones the example project in a temporary folder and opens it in Xcode)

99 |

Directly from the repo

100 | 101 |

Clone or download this repository and then open Example/RevealingTableViewCellExample.xcodeproj.

102 |

Demo video

103 | 104 |

Click to see an example

107 | 108 |

(opens in YouTube)

109 |

Installation

110 | 111 |

Requires: iOS 10 +

112 | 113 |
pod 'RevealingTableViewCell'
114 | 
115 |

Carthage

116 |
github "sovata8/RevealingTableViewCell"
117 | 
118 |

Usage

119 | 120 |

No code changes required, everything is done in Interface Builder.
121 | Note that this framework does not provide anything other than the sliding view - it’s up to you to set up any views that need be revealed (e.g. buttons, additional information etc.).

122 | 123 |

These screenshots show how to set up your views and IBOutlets:

124 | 125 |

126 | 127 |

128 |

Step 1

129 | 130 |

Use RevealingTableViewCell (or your subclass of it) as a custom class for your tableview cell in Interface Builder.

131 |

Step 2

132 | 133 |

Inside the cell’s default contentView, put a subview and connect it to the the IBOutlet uiView_mainContent. This will be the view that slides sideways to reveal some content underneath. Using AutoLayout, pin this uiView_mainContent to it’s superview (the contentView) using the following constraints:

134 | 135 |

uiView_mainContent.centerX = superview.centerX 136 | uiView_mainContent.width = superview.width 137 | uiView_mainContent.height = superview.height 138 | uiView_mainContent.centerY = superview.centerY

139 | 140 |

(or instead of the height and centerY constraints, you can use top and bottom constraints)

141 |

Step 3

142 | 143 |

Inside the cell’s default contentView, put and connect uiView_revealedContent_left and/or uiView_revealedContent_right subviews. Pin them using AutoLayout to the corresponding sides of your cell. Fix their widths. Make sure they are behind the uiView_mainContent.

144 |

Step 4

145 | 146 |

That’s all - run your app!

147 |

Making the cells close when needed (optional)

148 | 149 |

Usually, you would want cells to automatically close whenever you scroll the tableview, or when another cell is swiped sideways. To achieve this, use the provided tableview extension function closeAllCells(exceptThisOne:). Here is an example (from the example project):

150 |
// Close all cells when the tableview starts scrolling vertically
151 | extension ViewController: UIScrollViewDelegate
152 | {
153 |     func scrollViewDidScroll(_ scrollView: UIScrollView)
154 |     {
155 |         self.uiTableView.closeAllCells()
156 |     }
157 | }
158 | 
159 |
// Close all other cells when a particular cell starts being swiped
160 | extension ViewController: RevealingTableViewCellDelegate
161 | {
162 |     func didStartPanGesture(cell: RevealingTableViewCell)
163 |     {
164 |         self.uiTableView.closeAllCells(exceptThisOne: cell)
165 |     }
166 | }
167 | 
168 | 169 |

(of course when you are creating the cell in your cellForRowAt indexPath logic, don’t forget to set the delegate like this: cell.revealingCellDelegate = self)

170 |

Documentation

171 | 172 |

Check out the auto-generated Documentation.
173 | (If you’re reading this on GitHub, and the above link opens the html source, try this)

174 |

Used by

175 | 176 |

PivotList Logo
177 | PivotList

178 | 179 |

Please let me know if you use RevealingTableViewCell in your app and would like to be mentioned here. (either email me or create e new issue with the usedby label)

180 |

Known limitations and considerations

181 | 182 |

The way this library works requires that all the ‘hidden’ views (the ones that are behind the main view and are revealed when sliding), are in the view hierarchy of the cell at all times, even if they are never shown. This is obviously not great when performance matters.

183 |

License

184 | 185 |

This project is licensed under the terms of the MIT license. See the LICENSE file.

186 | 187 |
188 |
189 | 193 |
194 |
195 | 196 | 197 | 198 | -------------------------------------------------------------------------------- /docs/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`.token[href="${location.hash}"]`); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | -------------------------------------------------------------------------------- /docs/search.json: -------------------------------------------------------------------------------- 1 | {"Protocols/RevealingTableViewCellDelegate.html#/s:22RevealingTableViewCell0abcD8DelegateP09didChangeA5State4cellyA2AC_tF":{"name":"didChangeRevealingState(cell:)","abstract":"

This is called when the state changes and if there is an animation, it is called at the start of the animation.

","parent_name":"RevealingTableViewCellDelegate"},"Protocols/RevealingTableViewCellDelegate.html#/s:22RevealingTableViewCell0abcD8DelegateP18didStartPanGesture4cellyA2AC_tF":{"name":"didStartPanGesture(cell:)","abstract":"

Called when the user sarts horizontally sliding the cell.

","parent_name":"RevealingTableViewCellDelegate"},"Protocols/RevealingTableViewCellDelegate.html#/s:22RevealingTableViewCell0abcD8DelegateP25didFinishAnimatingInState4cell09revealingJ0yA2AC_AG0aJ0OtF":{"name":"didFinishAnimatingInState(cell:revealingState:)","abstract":"

Called at the end of an animation.

","parent_name":"RevealingTableViewCellDelegate"},"Protocols/RevealingTableViewCellDelegate.html":{"name":"RevealingTableViewCellDelegate","abstract":"

Delegate for the RevealingTableViewCell

"},"Extensions/UITableView.html#/s:So11UITableViewC014RevealingTableB4CellE13closeAllCells13exceptThisOneyA2CCSg_tF":{"name":"closeAllCells(exceptThisOne:)","abstract":"

Closes all the cells (unless you specify a cell to leave open).

","parent_name":"UITableView"},"Extensions/UITableView.html":{"name":"UITableView","abstract":"

Extension for easy closing of RevealingTableViewCells in a tableView

"},"Classes/RevealingTableViewCell/RevealingState.html#/s:22RevealingTableViewCellAAC0A5StateO6closedyA2DmF":{"name":"closed","abstract":"

The default state (none of the views underneath are revealed)

","parent_name":"RevealingState"},"Classes/RevealingTableViewCell/RevealingState.html#/s:22RevealingTableViewCellAAC0A5StateO8openLeftyA2DmF":{"name":"openLeft","abstract":"

When uiView_revealedContent_left is revealed

","parent_name":"RevealingState"},"Classes/RevealingTableViewCell/RevealingState.html#/s:22RevealingTableViewCellAAC0A5StateO9openRightyA2DmF":{"name":"openRight","abstract":"

When uiView_revealedContent_right is revealed

","parent_name":"RevealingState"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(py)uiView_revealedContent_left":{"name":"uiView_revealedContent_left","abstract":"

The content to be revealed, pinned to the left of the cell’s contentView. Optional.

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(py)uiView_revealedContent_right":{"name":"uiView_revealedContent_right","abstract":"

The content to be revealed, pinned to the right of the cell’s contentView. Optional.

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(py)uiView_mainContent":{"name":"uiView_mainContent","abstract":"

This will be the view that slides sideways to reveal some content underneath. It needs to be pinned to the cell’s contentView using the layoutConstraint (among others).

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell/RevealingState.html":{"name":"RevealingState","abstract":"

Describes the state of a RevealingTableViewCell

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/s:22RevealingTableViewCellAAC14revealingStateAB0aF0Ovp":{"name":"revealingState","abstract":"

The cell’s current revealing state

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/s:22RevealingTableViewCellAAC03setA5State_8animatedyAB0aF0O_SbtF":{"name":"setRevealingState(_:animated:)","abstract":"

Sets the cell’s revealing state with an optional animation.

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/s:22RevealingTableViewCellAAC09revealingD8DelegateAA0abcdF0_pSgvp":{"name":"revealingCellDelegate","abstract":"

Delegate for the RevealingTableViewCell

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(im)awakeFromNib":{"name":"awakeFromNib()","abstract":"

Documented in: NSObject

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@M@RevealingTableViewCell@objc(cs)RevealingTableViewCell(im)prepareForReuse":{"name":"prepareForReuse()","abstract":"

Documented in: UITableViewCell

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html#/c:@CM@RevealingTableViewCell@objc(cs)RevealingTableViewCell(im)gestureRecognizerShouldBegin:":{"name":"gestureRecognizerShouldBegin(_:)","abstract":"

Documented in: UIGestureRecognizerDelegate

","parent_name":"RevealingTableViewCell"},"Classes/RevealingTableViewCell.html":{"name":"RevealingTableViewCell","abstract":"

A UITableViewCell subclass that can be swiped to reveal content udnerneath it’s main view

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"}} -------------------------------------------------------------------------------- /docs/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/nikolaysuvandzhiev/Documents/MyGithubRepos/RevealingTableViewCell" 6 | } --------------------------------------------------------------------------------