Group channel pages
Group channel pages include contact selection, group creation, group settings, and member list management.
Enable the service
The information hosting service is enabled by default and ready for immediate use.
Contact selection page
The contact selection page uses the NCSelectUserViewController class.
This page displays the current user's friend list from the information hosting service by default.

Initialize
Create the friend list page by initializing NCSelectUserViewController. You must provide an NCSelectUserViewModel object as the business logic handler.
Parameters
NCSelectUserViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | NCSelectUserViewModel | Business logic handler for contact list retrieval and display |
NCSelectUserViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| type | NCSelectUserType | Contact selection type: NCSelectUserTypeCreateGroup for group creation or NCSelectUserTypeInviteJoinGroup for adding members |
| groupId | NSString | Group ID (optional for group creation, required when adding members) |
Example
// Group ID is optional for group creation but required when adding members
NCSelectUserViewModel *vm = [NCSelectUserViewModel viewModelWithType:NCSelectUserTypeCreateGroup groupId:nil];
NCSelectUserViewController *vc = [[NCSelectUserViewController alloc] initWithViewModel:vm];
[self.navigationController pushViewController:vc animated:YES];
Configure maximum selectable contacts
Set the maxSelectCount property of NCSelectUserViewModel to limit selectable contacts per session. Default is 30 (range: 1-100).
Example
NCSelectUserViewModel *vm = [NCSelectUserViewModel viewModelWithType:NCSelectUserTypeCreateGroup groupId:nil];
// Default maximum is 30
vm.maxSelectCount = 50;
NCSelectUserViewController *vc = [[NCSelectUserViewController alloc] initWithViewModel:vm];
[self.navigationController pushViewController:vc animated:YES];
Intercept selection completion
Implement NCSelectUserViewModelDelegate to handle selection completion events.
- Add delegate:
NCSelectUserViewModel *vm = [NCSelectUserViewModel viewModelWithType:NCSelectUserTypeCreateGroup groupId:nil];
vm.delegate = self;
NCSelectUserViewController *vc = [[NCSelectUserViewController alloc] initWithViewModel:vm];
[self.navigationController pushViewController:vc animated:YES];
- Implement delegate method:
- (BOOL)selectUserDidSelectComplete:(NCSelectUserViewModel *)viewModel
selectUserIds:(NSMutableArray <NSString *>*)selectUserIds
viewController:(UIViewController*)viewController {
return YES;//YES: Handle manually, NO: Let SDK handle
}
Group creation page
The group creation page uses NCGroupCreateViewController.

Initialize
Create the page by initializing NCGroupCreateViewController with an NCGroupCreateViewModel business logic handler.
Parameters
NCGroupCreateViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | NCGroupCreateViewModel | Business logic handler for group creation |
NCGroupCreateViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| inviteeUserIds | NSArray <NSString *>* | Selected user IDs (excluding current user) |
| delegate | NCGroupCreateViewModelDelegate | Delegate |
Example
NSArray *selectUserIds = @[@"userId1", @"userId2"];
NCGroupCreateViewModel *viewModel = [NCGroupCreateViewModel viewModelWithInviteeUserIds:self.selectUserIds];
viewModel.delegate = self;
NCGroupCreateViewController *vc = [[NCGroupCreateViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
You must implement the generateGroupId method from NCGroupCreateViewModelDelegate to provide group IDs.
Example
- (NSString *)generateGroupId {
return @"groupId";
}
Customize avatar selection
To support custom group avatars during creation, implement the avatar click handler:
Example
- (void)groupPortraitDidClick:(UIViewController *)inViewController
resultBlock:(void(^)(NSString *portraitUrl))resultBlock {
// Handle avatar selection and return URL via resultBlock
NSString *portraitRemoteUrl = @"remote_avatar_url";
resultBlock(portraitRemoteUrl);
}
Group settings page

Note: The do not disturb and pin channel features shown are demo implementations using custom cells.
Initialize
Use NCProfileViewController with an NCGroupProfileViewModel. The same view controller handles both group settings and user profiles.
Parameters
NCProfileViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | NCProfileViewModel | Business logic handler (use NCGroupProfileViewModel subclass for groups) |
NCGroupProfileViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| groupId | NSString | Group ID |
Example
NCGroupProfileViewModel *viewModel = [NCGroupProfileViewModel viewModelWithGroupId:self.targetId];
NCProfileViewController *vc = [[NCProfileViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
Custom title
The default title combines group name and member count. Modify after initialization:
Example
NCProfileViewController *vc = [[NCProfileViewController alloc] initWithViewModel:viewModel];
vc.title = @"custom title";
Configure displayed member count
Set displayMaxMemberCount in NCGroupProfileViewModel to control visible members (default: 30, range: 5-50).
Example
NCGroupProfileViewModel *viewModel = [NCGroupProfileViewModel viewModelWithGroupId:self.targetId];
viewModel.delegate = self;
/// Default is 30, must be between 5-50
viewModel.displayMaxMemberCount = 20;
NCProfileViewController *vc = [[NCProfileViewController alloc] initWithViewModel:viewModel];
Customize group settings cells
NCGroupProfileViewModel and NCMyProfileViewModel share the same parent class. Refer to user profile cell customization logic, replacing NCMyProfileViewModel with NCGroupProfileViewModel when checking page type.
Group member list page

Initialize
Clicking members in group settings navigates to this page automatically. For custom implementations, initialize NCGroupMemberListViewController with an NCGroupMemberListViewModel.
Parameters
NCGroupMemberListViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | NCGroupMemberListViewModel | Business logic handler for member management |
NCGroupMemberListViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| groupId | NSString | Group ID |
Example
NCGroupMemberListViewModel *viewModel = [NCGroupMemberListViewModel viewModelWithGroupId:self.groupId];
NCGroupMemberListViewController *membersVC = [[NCGroupMemberListViewController alloc] initWithViewModel:viewModel];
membersVC.title = @"Group members";
[self.navigationController pushViewController:membersVC animated:YES];
Configure pagination
Set pageCount in NCGroupMemberListViewModel to control members per page (default: 50, range: 1-100):
NCGroupMemberListViewModel *viewModel = [NCGroupMemberListViewModel viewModelWithGroupId:self.groupId];
/// Members per page (default 50, range 1-100)
viewModel.pageCount = 60;
Customize member selection
Override default profile navigation by implementing the delegate:
- Set delegate:
NCGroupMemberListViewModel *viewModel = [NCGroupMemberListViewModel viewModelWithGroupId:group.groupId];
viewModel.delegate = self;
- Implement handler:
- (BOOL)groupMemberList:(NCGroupMemberListViewModel *)viewModel
viewController:(UIViewController*)viewController
tableView:(UITableView *)tableView
didSelectRow:(NSIndexPath *)indexPath
cellViewModel:(NCGroupMemberCellViewModel *)cellViewModel {
return YES;///YES: Handle manually, NO: Let SDK handle
}
Member removal page

Initialize
Group settings includes removal by default. For custom implementations, use NCRemoveGroupMembersViewController with NCRemoveGroupMembersViewModel.
Parameters
NCRemoveGroupMembersViewController parameters:
| Parameter | Type | Description |
|---|---|---|
| viewModel | NCRemoveGroupMembersViewModel | Business logic handler for member removal |
NCRemoveGroupMembersViewModel parameters:
| Parameter | Type | Description |
|---|---|---|
| groupId | NSString | Group ID |
Example
NCRemoveGroupMembersViewModel *viewModel = [NCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
NCRemoveGroupMembersViewController *vc = [[NCRemoveGroupMembersViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
Configure maximum removable members
Set maxSelectCount in NCRemoveGroupMembersViewModel (default: 30, range: 1-100):
Example
NCRemoveGroupMembersViewModel *viewModel = [NCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
/// Maximum selectable (default 30, range 1-100)
viewModel.maxSelectCount = 60;
Customize member selection
Override default behavior:
- Set delegate:
NCRemoveGroupMembersViewModel *viewModel = [NCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
viewModel.delegate = self;
- Implement handler:
- (BOOL)groupRemoveMembers:(NCRemoveGroupMembersViewModel *)viewModel
viewController:(UIViewController*)viewController
tableView:(UITableView *)tableView
didSelectRow:(NSIndexPath *)indexPath
cellViewModel:(NCRemoveGroupMemberCellViewModel *)cellViewModel {
return YES;///YES: Handle manually, NO: Let SDK handle
}
Intercept removal completion
Handle removal events manually:
- Set delegate:
NCRemoveGroupMembersViewModel *viewModel = [NCRemoveGroupMembersViewModel viewModelWithGroupId:group.groupId];
viewModel.delegate = self;
- Implement handler:
- (BOOL)groupRemoveMembersDidSelectComplete:(NCRemoveGroupMembersViewModel *)viewModel
selectUserIds:(NSMutableArray <NSString *>*)selectUserIds
viewController:(UIViewController*)viewController {
return YES;///YES: Handle manually, NO: Let SDK handle
}