SwiftReorder is a UITableView extension that lets you add long-press drag-and-drop reordering to any table view. It's robust, lightweight, and fully customizable.
- Smooth animations
- Automatic edge scrolling
- Works with multiple table sections
- Customizable shadow, scaling, and transparency effects
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
$ brew update
$ brew install carthage
To integrate SwiftReorder into your Xcode project using Carthage, specify it in your Cartfile
:
github "GianniCarlo/SwiftReorder" ~> 5.2.0
Run carthage update
to build the framework and drag the built DirectoryWatcher.framework
into your Xcode project.
The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift
compiler.
Once you have your Swift package set up, adding DirectoryWatcher as a dependency is as easy as adding it to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/GianniCarlo/SwiftReorder.git", .upToNextMajor(from: "5.2.0"))
]
You can integrate SwiftReorder into your project manually by copying the contents of the Source
folder into your project.
- Add the following line to your table view setup.
override func viewDidLoad() {
// ...
tableView.reorder.delegate = self
}
- Add this code to the beginning of your
tableView(_:cellForRowAt:)
.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let spacer = tableView.reorder.spacerCell(for: indexPath) {
return spacer
}
// ...
}
- Implement the
tableView(_:reorderRowAt:to:)
delegate method, and others as necessary.
extension MyViewController: TableViewReorderDelegate {
func tableView(_ tableView: UITableView, reorderRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
// Update data model
}
}
This method is analogous to the UITableViewDataSource
method tableView(_:moveRowAt:to:)
. However, it may be called multiple times in the course of one drag-and-drop action.
SwiftReorder exposes several properties for adjusting the style of the reordering effect. For example, you can add a scaling effect to the selected cell:
tableView.reorder.cellScale = 1.05
Or adjust the shadow:
tableView.reorder.shadowOpacity = 0.5
tableView.reorder.shadowRadius = 20