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 -diffIdentifier
s 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 -diffIdentifier
s 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.