Overview
The Transfer Group Ownership feature provides a modal interface where the group owner can:- See a list of current group members (excluding themselves)
- Select exactly one member to become the new owner
- Trigger the ownership transfer API call
- Automatically exit the group after successful transfer
Prerequisites
Before implementing ownership transfer, ensure you have:- Completed Getting Started setup
- CometChat UIKit v5+ installed via CocoaPods or Swift Package Manager
- CometChatSDK and CometChatUIKitSwift integrated
- User logged in with
CometChatUIKit.login() UINavigationControlleror modal presentation flow set up- Group context (GUID) available when invoking the transfer screen
Components
| Component | Description |
|---|---|
TransferOwnership | Subclass of CometChatGroupMembers enabling single selection mode |
viewModel.groupMembers | Data source array of GroupMember objects |
onSelectedItemProceed | Closure invoked when user confirms selection |
CometChat.transferGroupOwnership | API call to delegate group ownership |
spinnerView | UIActivityIndicatorView showing loading state |
leaveGroupCallback | Callback to perform group exit after transfer |
Integration Steps
Step 1: Present Transfer Ownership Screen
Show the ownership transfer UI modally:GroupDetailsViewController.swift
Step 2: Configure Single Selection Mode
Restrict selection to one member and capture selection:TransferOwnership.swift
Step 3: Load and Filter Member List
Exclude the current owner from the selectable list:TransferOwnership.swift
Step 4: Perform Ownership Transfer
Call the API, emit event, and exit the group:TransferOwnership.swift
Step 5: Manage Loading State
Provide visual feedback during network calls:TransferOwnership.swift
Complete Implementation
Here’s the completeTransferOwnership class:
Customization Options
Title Text
Replace localization key with custom string:Spinner Style
AdjustspinnerView.style and color using CometChatTheme:
Error Handling
Customize error alerts in theonError closure:
Edge Cases
| Scenario | Handling |
|---|---|
| Empty member list | Show an informative empty state when no eligible members exist |
| Network failures | Disable proceed button until connection restores |
| Blocked members | Exclude or disable blocked users from selection |
Error Handling
| Error Type | Solution |
|---|---|
| Transfer failures | Present UIAlertController with retry option |
| Unexpected states | Ensure removeSpinnerView() always executes in defer |
Feature Matrix
| Feature | Method / Component | File(s) |
|---|---|---|
| Launch transfer flow | showTransferOwnership(for:) | GroupDetailsViewController.swift |
| Single-member selection | selectionMode = .single | TransferOwnership.swift |
| Filter out current owner | reloadData() override | TransferOwnership.swift |
| Execute API transfer | CometChat.transferGroupOwnership() | TransferOwnership.swift |
| Show/hide loading indicator | addSpinnerView(), removeSpinnerView() | TransferOwnership.swift |
Related Components
- Groups - Display group list
- Group Members - Display group member list
- Events - Listen for chat events