All Versions
Latest Version
Avg Release Cycle
70 days
Latest Release
1329 days ago

Changelog History
Page 1

  • v8.0.0

    October 27, 2020
  • v8.0.0-beta.1 Changes

    September 02, 2020

    βž• Added

    • Cell and supplementary view events are now available inside mapping closure directly, for example:
    // Previous releases
    manager.didSelect(PostCell.self) { cell, model, indexPath in
        // React to selection
    // New
    manager.register(PostCell.self) { mapping in
        mapping.didSelect { cell, model, indexPath in

    Those events are now tied to ViewModelMapping instance, which means, that events, registered this way, will only trigger, if mapping condition of current mapping applies. For example:

    manager.register(PostCell.self) { mapping in
        mapping.condition = .section(0)
        mapping.didSelect { cell, model, indexPath in  
            // This closure will only get called, when user selects cell in the first section
    manager.register(PostCell.self) { mapping in
        mapping.condition = .section(1)
        mapping.didSelect { cell, model, indexPath in  
            // This closure will only get called, when user selects cell in the second section

    πŸ’… Please note, that headers and footers only support mapping-style event registration, if they inherit from UITableViewHeaderFooterView.

    • TableViewConfiguration semanticHeaderHeight and semanticFooterHeight, that specify whether DTTableViewManager should deploy custom logic in tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) and tableView(_ tableView: UITableView, heightForFooterInSection section: Int). This logic includes checking whether header and footer models exist in storage, returning UITableView.automaticDimension for sections, whose header and footer models are Strings (for table section titles), as well as returning minimal height for cases where data model is not there(which happens to be different for UITableView.Style.plain and UITableView.Style.grouped). Those properties default to true, but if you want to use self-sizing table view sections headers or footers, which may improve perfomance, consider turning those off:
    manager.configuration.semanticHeaderHeight = false
    manager.configuration.semanticFooterHeight = false

    Please note, that even when those properties are set to false, corresponding UITableViewDelegate methods will still be called in two cases:

    1. Your DTTableViewManageable instance implements them
    2. You register a heightForHeader(withItem:_:) or heightForFooter(withItem:_:) closures on DTTableViewManager instance.

    πŸ’₯ Breaking

    πŸš€ This release requires Swift 5.3. Minimum iOS / tvOS deployment targets are unchanged (iOS 11, tvOS 11).

    πŸš€ Some context: this release heavily relies on where clauses on contextually generic declarations, that are only available in Swift 5.3 - SE-0267.

    • ViewModelMapping is now a generic class, that captures view and model information(ViewModelMapping).

    πŸ›  Fixed

    • indentationLevelForCell closure now correctly returns Int instead of CGFloat.
    • Several event API's have been improved to allow returning nil for methods, that accept nil as a valid value: contextMenuConfiguration, previewForHighlightingContextMenu, previewForDismissingContextMenu.

    πŸ”„ Changed

    • πŸ‘ Generic placeholders for cell/model/view methods have been improved for better readability.

    πŸ—„ Deprecated

    • Several cell/header/footer/supplementary view registration methods have been deprecated to unify registration logic. Please use register(_:mapping:handler:), registerHeader(_:mapping:handler:), registerFooter(_:mapping:handler:) as a replacements for all of those methods. For more information on those changes, please read [migration guide](Documentation/Migration%20guides/
    • All non-deprecated registration methods now have an additional handler closure, that allows to configure cells/headers/footers that are dequeued from UITableView. This is a direct replacement for configure(_:_:, configureHeader(_:_:), configureFooter(_:_:) , that are all now deprecated. Please note, that handler closure is called before DTModelTransfer.update(with:) method.
    • πŸ”§ DTTableViewManager.configureEvents(for:_:), it's functionality has become unnecessary since mapping closure of cell/header/footer registration now captures both cell and model type information for such events.
    • πŸ“š DTTableViewManager.configureDiffableDataSource(modelProvider:) for non-hashable data models. Please use configureDiffableDataSource method for models, that are Hashable. From Apple's documentation: If you’re working in a Swift codebase, always use UITableViewDiffableDataSource instead.
    • ⚑️ TableViewUpdater.usesLegacyTableViewUpdateMethods property.
  • v7.2.0 Changes

    July 02, 2020

    πŸ”„ Changed

    • πŸš€ Deployment targets - iOS 11 / tvOS 11.
    • Minimum Swift version required: 5.0
    • βž• Added support for DTModelStorage/Realm with Realm 5

    πŸ‘ Please note, that this framework version source is identical to previous version, which supports iOS 8 / tvOS 9 / Swift 4.0 and higher.

  • v7.1.0 Changes

    April 29, 2020

    πŸ”„ Changed

    • It's not longer necessary to import DTModelStorage framework to use it's API's. import DTTableViewManager now implicitly exports DTModelStorage.
  • v7.0.0 Changes

    November 08, 2019
    • 🚚 willCommitMenuWithAnimator method has been made unavailable for Xcode 11.2, because UITableViewDelegate method it used has been removed from UIKit on Xcode 11.2.
  • v7.0.0-beta.2 Changes

    September 06, 2019
    • βž• Added support for Xcode versions, that are older than Xcode 11.
  • v7.0.0-beta.1 Changes

    August 20, 2019

    πŸš€ This is a major release with some breaking changes, please read DTTableViewManager 7.0 Migration Guide

    βž• Added

    • πŸ”§ configureDiffableDataSource(modelProvider:) method to enable UITableViewDiffableDataSource with DTTableViewManager.
    • Ability for DTTableViewManageable to implement tableView(_:viewForHeaderInSection:) and tableView(_:viewForFooterInSection:) to return view directly without going through storages.
    • πŸ”§ minimalHeaderHeightForTableView and minimalFooterHeightForTableView properties for TableViewConfiguration, that allows configuring height for section headers and footers that need to be hidden.
    • 0️⃣ Ability to customize bundle, from which xib files are loaded from by setting bundle property on ViewModelMapping in mappingBlock. As before, bundle defaults to Bundle(for: ViewClass.self).
    • DTTableViewManager.supplementaryStorage getter, that conditionally casts current storage to SupplementaryStorage protocol.

    πŸ†• New method wrappers for iOS 13 API

    • shouldBeginMultipleSelectionInteraction
    • didBeginMultipleSelectionInteraction
    • didEndMultipleSelectionInteraction
    • contextMenuConfiguration(for:)
    • previewForHighlightingContextMenu
    • previewForDismissingContextMenu
    • willCommitMenuWithAnimator

    πŸ”„ Changed

    • If tableView section does not contain any items, and TableViewConfiguration.display<Header/Footer>OnEmptySection property is set to false, DTTableViewManager no longer asks for header footer height explicitly and returns TableViewConfiguration.minimal<Header/Footer>HeightForTableView.
    • Anomaly event verification now allows subclasses to prevent false-positives.
    • ⚑️ animateChangesOffScreen property on TableViewUpdater that allows to turn off animated updates for UITableView when it is not on screen.

    βœ‚ Removed

    • 🚚 Usage of previously deprecated and now removed from DTModelStorage ViewModelMappingCustomizing protocol.

    πŸ’₯ Breaking

    DTModelStorage header, footer and supplementary model handling has been largely restructured to be a single closure-based API. Read more about changes in DTModelStorage changelog. As a result of those changes, several breaking changes in DTTableViewManager include:

    • 🚚 SupplementaryAccessible extension with tableHeaderModel and tableFooterModel properties has been removed.
    • 0️⃣ Because headers/footers are now a closure based API, setSectionHeaderModels and setSectionFooterModels do not create sections by default, and do not call tableView.reloadData.
    • πŸ”§ If a storage does not contain any sections, even if configuration.displayHeaderOnEmptySections or configuration.displayFooterOnEmptySections is set, headers and footers will not be displayed, since there are no sections, which is different from present sections, that contain 0 items. For example, If you need to show a header or footer in empty section using MemoryStorage, you can call memoryStorage.setItems([Int](), forSectionAt: emptySectionIndex), and now with empty section header and footer can be displayed.

    Other breaking changes:

    • ⚑️ tableViewUpdater will contain nil if DTTableViewManager is configured to work with UITableViewDiffableDataSource.
    • 🚚 DTTableViewOptionalManageable protocol was removed and replaced by optionalTableView property on DTTableViewManageable protocol. One of tableView/optionalTableView properties must be implemented by DTTableViewManageable instance to work with DTTableViewManager.

    πŸ—„ Deprecated

    πŸ—„ Following methods have been deprecated due to their delegate methods being deprecated in iOS 13:

    • editActions(for:)
    • shouldShowMenuForItemAt
    • canPerformAction
    • performAction
  • v6.6.0 Changes

    June 17, 2019
    • βž• Added support for Swift Package Manager in Xcode 11
  • v6.5.0 Changes

    April 07, 2019

    βž• Added

    • Convenience constructor for DTTableViewManager object: init(storage:) that allows to create it's instance without initializing MemoryStorage.
    • πŸ”§ Static variable defaultStorage on DTTableViewManager that allows to configure which Storage class is used by default.
    • πŸ“š Documentation
    • πŸ‘Œ Support for Xcode 10.2 and Swift 5

    βœ‚ Removed

    • πŸ‘Œ Support for Xcode 9 and Swift 3
  • v6.4.0 Changes

    September 25, 2018

    πŸš€ Dependency changelog -> DTModelStorage 7.2.0 and higher

    βž• Added

    • Example of auto-diffing capability and animations when using SingleSectionStorage.
    • πŸ‘Œ Support for Swift 4.2 and Xcode 10.

    πŸ”„ Changed

    • ⬇️ Reduced severity comment for nilHeaderModel and nilFooterModel anomalies, since in some cases it's actually a desired behavior.