Enhance your iOS chat app with threaded messaging by integrating CometChat’s UIKit for iOS, allowing users to reply to specific messages within a focused thread view.

Overview

Threaded messages allow users to reply to specific messages within a conversation, creating a sub-conversation for improved clarity and context. With CometChat’s UIKit for iOS, you can:
  • Display a dedicated thread view.
  • View and send replies to a selected message.
  • Maintain context between the main conversation and the thread.

Prerequisites

  • A working UIKit-based iOS project.
  • CometChat UIKit for iOS v4+ installed via Swift Package Manager or CocoaPods.
  • Valid CometChat App ID, Region, and Auth Key.
  • A navigation controller configured in your project.

Components

ComponentRole
CometChatMessageListDisplays messages and provides onThreadRepliesClick handler.
CometChatThreadedMessageHeaderShows the parent message context at the top of the thread.
CometChatMessageComposerComposes messages with an optional parentMessageId.
ThreadedMessagesVCView controller that hosts the threaded conversation.

Integration Steps

Show the “Reply in Thread” Option

Navigate to the thread when a message’s thread icon is tapped.
messageListView.set(onThreadRepliesClick: { [weak self] message, _ in
    guard let self = self else { return }
    let threadVC = ThreadedMessagesVC()
    threadVC.parentMessage = message
    self.navigationController?.pushViewController(threadVC, animated: true)
})
File reference:
ThreadedMessagesVC.swift
Captures user intent and opens a focused thread screen. Show a dedicated UI for thread replies. In ThreadedMessagesVC.swift:
view.addSubview(parentMessageView)
view.addSubview(messageListView)
view.addSubview(composerView)
Header:
let parentMessageContainerView = CometChatThreadedMessageHeader()
Message List:
messageListView.set(user: user, parentMessage: parentMessage)
Provides a focused UI for thread interactions.

Send a Threaded Message

Ensure new replies are attached to the correct parent message.
composerView.set(parentMessageId: parentMessage?.id ?? 0)
Set the conversation context:
composerView.set(user: user)
composerView.set(group: group)

Fetch & Display Thread Replies

Only messages that are part of the thread are displayed. Handled internally by:
messageListView.set(user: user, parentMessage: parentMessage)
Ensures CometChatMessageList fetches replies using the parentMessageId.

Customization Options

  • Header Styling: Customize CometChatThreadedMessageHeader (fonts, colors, etc.).
  • Composer: Modify placeholder text, input styles, and icons.
  • Navigation: Add a custom navigationItem.leftBarButtonItem for back navigation.

Filtering / Edge Cases

  • Parent Message Deleted: Display a fallback UI or disable the composer.
  • No Replies: Show an empty state (e.g., “No replies yet”).
  • Offline Mode: Disable the composer and queue thread operations.

Error Handling & Edge Cases

  • Fetch Failures: Show an error UI or retry mechanism when loading thread messages.
  • Send Failures: Handle send errors via delegate callbacks or show an alert with retry.
  • Loading States: Display a UIActivityIndicatorView during fetch/send operations.
  • Blocked Users: Remove the composer and display a blocked status label.

Summary / Feature Matrix

FeatureImplementation
Show thread optionCometChatMessageList.onThreadRepliesClick
Thread view screenThreadedMessagesVC.swift
Display threaded messagesCometChatMessageList.set(parentMessage:)
Send threaded messageCometChatMessageComposer.set(parentMessageId:)
Thread headerCometChatThreadedMessageHeader
Handle blocked userRemove composer & show a blocked user label

Full Sample App

Explore a complete sample application demonstrating threaded messaging.View on GitHub

UIKit Source Code

Browse the CometChat UIKit for iOS source code.View on GitHub