组件概述
Search 是搜索组件,为用户提供搜索框、搜索结果展示、界面跳转等功能的完整组件集合。该组件支持用户搜索、群组搜索、消息搜索等功能,并提供了丰富的交互回调接口。
说明:
搜索入口 | 搜索结果 |
![]() | ![]() |
组件集成
Search 组件属于 TUIKit SwiftUI 的一部分,集成 TUIKit SwiftUI 即可获取并使用 Search 组件。集成方法请参考文档 TUIKit SwiftUI 里的集成步骤,完成登录操作。
组件构成
SearchBar 是搜索的入口组件,对外仅暴露了搜索组件的初始化方法,其他逻辑均封装在 SearchBar 中。方法名 | 参数 | 描述 |
init | onTapItem: @escaping (Any) -> Void | 点击搜索到的结果回调,包括好友、群组、消息、会话等搜索结果条目。 |
基础用法
SearchBar 的搜索结果路由跳转如下:自动路由:在搜索结果界面中,点击更多(More)按钮或聊天记录列表时,组件内部会通过 Navigator 自动完成页面跳转。
自定义路由:当用户点击具体的联系人、群组、会话或消息时,组件会触发相应的回调
onTapItem: @escaping (Any) -> Void,需在回调中实现自定义跳转(例如跳转到您的自定义聊天界面)。示例代码如下:
// 初始化 SearchBarSearchBar(onTapItem: { result inhandleSearchResult(result)})// 响应搜索结果的点击事件// onConversationClick 是将事件抛给更上层,非必须。是否这样处理取决于开发者的项目层级。private func handleSearchResult(_ result: Any) {if let friendInfo = result as? FriendSearchInfo {// 解析出联系人结果点击信息let conversationID = ChatUtil.getC2CConversationID(friendInfo.userID)var conversation = ConversationInfo(conversationID: conversationID)conversation.type = .c2cconversation.title = friendInfo.friendRemark ?? friendInfo.userInfo.nicknameconversation.avatarURL = friendInfo.userInfo.avatarURL// 将事件抛到上层,由上层处理跳转单聊列表onConversationClick?(NavigationInfo(conversation: conversation))} else if let groupInfo = result as? GroupSearchInfo {// 解析出群组结果点击信息let conversationID = ChatUtil.getGroupConversationID(groupInfo.groupID)var conversation = ConversationInfo(conversationID: conversationID)conversation.type = .groupconversation.title = groupInfo.groupNameconversation.avatarURL = groupInfo.groupAvatarURL// 将事件抛到上层,由上层处理跳转群聊列表onConversationClick?(NavigationInfo(conversation: conversation))} else if let messageDict = result as? [String: Any],let messageInfo = messageDict["message"] as? MessageInfo,let conversationID = messageDict["conversationID"] as? String{// 解析出消息结果点击信息var conversation = ConversationInfo(conversationID: conversationID)if conversationID.hasPrefix("c2c_") {conversation.type = .c2c} else {conversation.type = .group}conversation.title = messageDict["conversationName"] as? Stringconversation.avatarURL = messageDict["conversationAvatar"] as? String// 将事件抛到上层,由上层处理跳转会话,且定位到指定消息onConversationClick?(NavigationInfo(conversation: conversation, locateMessage: messageInfo))} else if let conversationDict = result as? [String: Any],let conversationID = conversationDict["conversationID"] as? String{// 解析出会话结果点击信息var conversation = ConversationInfo(conversationID: conversationID)if conversationID.hasPrefix("c2c_") {conversation.type = .c2c} else {conversation.type = .group}conversation.title = conversationDict["conversationName"] as? Stringconversation.avatarURL = conversationDict["conversationAvatar"] as? String// 将事件抛到上层,由上层处理跳转会话onConversationClick?(NavigationInfo(conversation: conversation))}}

