IGListBindingSectionController

Objective-C


@interface IGListBindingSectionController<
    __covariant ObjectType : id <IGListDiffable>> : IGListSectionController

Swift

class ListBindingSectionController<ObjectType> : ListSectionController where ObjectType : ListDiffable

This section controller uses a data source to transform its “top level” object into an array of diffable view models. It then automatically binds each view model to cells via the IGListBindable protocol.

Models used with IGListBindingSectionController should take special care to always return YES for identical objects. That is, any objects with matching -diffIdentifiers should always be equal, that way the section controller can create new view models via the data source, create a diff, and update the specific cells that have changed.

In Objective-C, your -isEqualToDiffableObject: can simply be:

- (BOOL)isEqualToDiffableObject:(id)object {
  return YES;
}

In Swift:

func isEqual(toDiffableObject object: IGListDiffable?) -> Bool {
  return true
}

Only when -diffIdentifiers match is object equality compared, so you can assume the class is the same, and the instance has already been checked.

  • A data source that transforms a top-level object into view models, and returns cells and sizes for given view models.

    Declaration

    Objective-C

    @property (nonatomic, weak, nullable) id<IGListBindingSectionControllerDataSource> dataSource;

    Swift

    weak var dataSource: (any ListBindingSectionControllerDataSource)? { get set }
  • A delegate that receives selection events from cells in an IGListBindingSectionController instance.

    Declaration

    Objective-C

    @property (nonatomic, weak, nullable) id<IGListBindingSectionControllerSelectionDelegate> selectionDelegate;

    Swift

    weak var selectionDelegate: (any ListBindingSectionControllerSelectionDelegate)? { get set }
  • The object currently assigned to the section controller, if any.

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly, nullable) ObjectType object;

    Swift

    var object: ObjectType? { get }
  • The array of view models created from the data source. Values are changed when the top-level object changes or by calling -updateAnimated:completion: manually.

    Declaration

    Objective-C

    @property (nonatomic, copy, readonly) NSArray<id<IGListDiffable>> *_Nonnull viewModels;

    Swift

    var viewModels: [any ListDiffable] { get }
  • Tells the section controller to query for new view models, diff the changes, and update its cells.

    Declaration

    Objective-C

    - (void)updateAnimated:(BOOL)animated
                completion:(nullable void (^)(BOOL))completion;

    Swift

    func update(animated: Bool) async -> Bool

    Parameters

    animated

    A flag indicating if the transition should be animated or not.

    completion

    An optional completion block executed after updates finish. Parameter is YES if updates were applied.

  • Notifies the section that a list object should move within a section as the result of interactive reordering.

    Note

    this method must be implemented if interactive reordering is enabled. To ensure updating the internal viewModels array, calling super is required, preferably before your own implementation.

    Declaration

    Objective-C

    - (void)moveObjectFromIndex:(NSInteger)sourceIndex
                        toIndex:(NSInteger)destinationIndex;

    Swift

    func moveObject(from sourceIndex: Int, to destinationIndex: Int)

    Parameters

    sourceIndex

    The starting index of the object.

    destinationIndex

    The ending index of the object.