> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-agentbuddy-4.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UI Components

> UI Components — CometChat documentation.

**UI Components** are building blocks of the UI Kit. **UI Components** are a set of custom classes specially designed to build a rich chat app. There are different UI Components available in the UI Kit Library.

## 1. CometChatUI

**CometChatUI** is an option to launch a fully functional chat application using the UI Kit. In **CometChatUI** all the **UI Components** are interlinked and work together to launch a fully functional chat on your mobile application.

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/Mk5NiH1LikIkVJzj/images/e44cdb6f-1623200179-937cd0e375e1300a22cb40f677f69912.jpg?fit=max&auto=format&n=Mk5NiH1LikIkVJzj&q=85&s=db7ca2572e6d5c2334f231fd31bd179b" width="7774" height="4184" data-path="images/e44cdb6f-1623200179-937cd0e375e1300a22cb40f677f69912.jpg" />
</Frame>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    DispatchQueue.main.async {
    let cometChatUI = CometChatUI()
    cometChatUI.setup(withStyle: .fullScreen)
    self.present(cometChatUI, animated: true, completion: nil)
    }
    ```
  </Tab>
</Tabs>

## 2. CometChatConversationList

The **CometChatConversationList** is a view controller with a list of recent conversations. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch Conversation List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let conversationList = CometChatConversationList()
    let navigationController = UINavigationController(rootViewController:conversationList)
    conversationList.set(title:"Chats", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/E7d32Ee4Uz8WOAWH/images/91d893d8-484464a-conversationList-a021a1ca1a7b6b6c15c2eb4650e22839.jpg?fit=max&auto=format&n=E7d32Ee4Uz8WOAWH&q=85&s=1eb29be2958cbb2fb95d183bcaeba261" width="1709" height="3424" data-path="images/91d893d8-484464a-conversationList-a021a1ca1a7b6b6c15c2eb4650e22839.jpg" />
</Frame>

### Embed Conversation List in View Controller

You can use this by subclassing UIViewController as **CometChatConversationList** as shown below:

<Note>
  > To assign a CometChatConversationList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatConversationList {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.delegate = self
    	}
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the conversation by adding **ConversationListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: ConversationListDelegate {
        
    func didSelectConversationAtIndexPath(conversation: Conversation, indexPath: IndexPath){
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 3. CometChatCallsList

The **CometChatCallsList** is a view controller with a list of recent calls. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch Calls List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let callList = CometChatCallsList()
    let navigationController = UINavigationController(rootViewController:callList)
    callList.set(title:"Calls", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/y7ehdx2ZKd-RVVN0/images/9f658703-d93c58c-CallsList-83bf53d90de9a928a129951a51b2bef4.jpg?fit=max&auto=format&n=y7ehdx2ZKd-RVVN0&q=85&s=92a6ae3706c9adb14156afbc04091f20" width="2014" height="4032" data-path="images/9f658703-d93c58c-CallsList-83bf53d90de9a928a129951a51b2bef4.jpg" />
</Frame>

### Embed Call List in View Controller

You can use this by subclassing UIViewController as **CometChatCallsList** as shown below:

<Note>
  > To assign a CometChatCallsList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatCallsList {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.delegate = self
    	}
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the call by adding **CallsListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: CallsListDelegate {
        
    func didSelectCallsAtIndexPath(call: BaseMessage, indexPath: IndexPath){
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 4. CometChatUserList

The **CometChatUserList** is a view controller with a list of users. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch User List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let userList = CometChatUserList()
    let navigationController = UINavigationController(rootViewController:userList)
    userList.set(title:"Contacts", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/QQ1NRsWk2SI_Ph8A/images/6869fc65-bdb8d7d-userList-6e3c0da50fe84c4cb845d8e8cee7befb.jpg?fit=max&auto=format&n=QQ1NRsWk2SI_Ph8A&q=85&s=dcb6ec647594fabb0f293c95559aecb8" width="1709" height="3424" data-path="images/6869fc65-bdb8d7d-userList-6e3c0da50fe84c4cb845d8e8cee7befb.jpg" />
</Frame>

### Embed User List in View Controller

You can use this by subclassing UIViewController as **CometChatUserList** as shown below:

<Note>
  > To assign a CometChatUserList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatUserList {

    override func viewDidLoad() {
      super.viewDidLoad()
      self.delegate = self
      }
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the user by adding **UserListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: UserListDelegate {
        
    func didSelectUserAtIndexPath(user: User, indexPath: IndexPath) {
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 5. CometChatGroupList

The **CometChatGroupList** is a view controller with a list of groups. The view controller has all the necessary delegates and methods.

You can present this screen using **two methods.**

### Launch Group List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let groupList = CometChatGroupList()
    let navigationController = UINavigationController(rootViewController:groupList)
    groupList.set(title:"Groups", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/7FYjFvK_n0jtmU0Z/images/ba586e31-5b5e37a-groupList-e9f9e6ae9bc50ddf5861cf939d038a51.jpg?fit=max&auto=format&n=7FYjFvK_n0jtmU0Z&q=85&s=1003a5ef2ad9ed0ee8b00621a59ebf4d" width="1709" height="3424" data-path="images/ba586e31-5b5e37a-groupList-e9f9e6ae9bc50ddf5861cf939d038a51.jpg" />
</Frame>

### Embed Group List in View Controller

You can use this by subclassing UIViewController as **CometChatGroupList** as shown below:

<Note>
  > To assign a CometChatGroupList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatGroupList {

    override func viewDidLoad() {
          super.viewDidLoad()
          self.delegate = self
    	}
    }
    ```
  </Tab>
</Tabs>

Also, you can perform an action on tap on the group by adding **GroupListDelegate** in the app's view controller as shown below:

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension viewController: GroupListDelegate {
        
    func didSelectGroupAtIndexPath(group: Group, indexPath: IndexPath)
            //Do Stuff
        }  
    }
    ```
  </Tab>
</Tabs>

## 6. CometChatMessageList

The **CometChatMessageList** is a view controller with a list of messages for a particular user or group. The view controller has all the necessary delegates and methods.

**CometChatMessageList** requires `User` or `Group` object to work properly.

<Note>
  > To retrieve the User or Group object you can call CometChat.getUser() or CometChat.getGroup().
</Note>

You can present this screen using **two methods.**

### Launch Message List (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let messageList = CometChatMessageList()
    let navigationController = UINavigationController(rootViewController:messageList)
    messageList.set(conversationWith: user, type: .user)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/0712yJtGYbJvABIy/images/052d2ab7-c4cd46d-messageList-8d97521f157b35614374a9d03ff59452.jpg?fit=max&auto=format&n=0712yJtGYbJvABIy&q=85&s=9402155247a23ee61a71b34a7432fa87" width="3988" height="7985" data-path="images/052d2ab7-c4cd46d-messageList-8d97521f157b35614374a9d03ff59452.jpg" />
</Frame>

### Embed Message List in View Controller

You can use this by subclassing UIViewController as **CometChatMessageList** as shown below:

<Note>
  > To assign a CometChatMessageList to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatMessageList {

    override func viewDidLoad() {
          super.viewDidLoad()
          set(conversationWith: user, type: .user)
    	}
    }
    ```
  </Tab>
</Tabs>

## 7. CometChatUserProfile

The **CometChatUserProfile** is a view controller with user information and a list of dummy cells for settings of the app which the developer can use in his app.

You can present this screen using **two methods.**

### Launch User Profile (Recommended)

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let userProfile = CometChatUserProfile()
    let navigationController = UINavigationController(rootViewController:userProfile)
    userProfile.set(title:"More", mode: .automatic)
    self.present(navigationController, animated:true, completion:nil)
    ```
  </Tab>
</Tabs>

<Frame>
  <img src="https://mintcdn.com/cometchat-22654f5b-docs-agentbuddy-4/E7d32Ee4Uz8WOAWH/images/94eb6b13-feba996-moreInfo-3e8959fa08b73f40daac81689c83e7dd.jpg?fit=max&auto=format&n=E7d32Ee4Uz8WOAWH&q=85&s=0d1ddfcbc5699554797456ed6a6c147b" width="1709" height="3424" data-path="images/94eb6b13-feba996-moreInfo-3e8959fa08b73f40daac81689c83e7dd.jpg" />
</Frame>

### Embed UserProfile inView Controller

You can use this by subclassing UIViewController as **CometChatUserProfile** as shown below:

<Note>
  > To assign a CometChatUserProfile to view controller make sure that the Navigation controller is attached properly.
</Note>

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    import CometChatPro

    class viewController: CometChatUserProfile {

    override func viewDidLoad() {
          super.viewDidLoad()
    		 
    	}
    }
    ```
  </Tab>
</Tabs>
