界面跳转

更新时间: 2024/03/15 18:26:21

IM UIKit 在NECoreKit 组件中提供统一路由 Router,支持参数传递和回调,实现界面的跳转和模块之间的解耦。

如何跳转

IM UIKit 任意内置界面(如单聊界面)都可以通过路由地址跳转至其他指定界面。跳转至的指定界面,可以是其他内置界面,也可以是您的应用的新增界面。

调用 use 方法进行界面跳转。

Swift

方法原型如下:

swift    public func use(_ url: String,
                    parameters: [String: Any]? = nil,
                    closure: RouteHandleCallbackClosure? = nil)
参数 类型 说明
url String 注册界面对应的跳转地址
parameters [String: Any] 传递到下个界面的参数
closure RouteHandleCallbackClosure (可选)异步回调

parameters中的导航控制器(UINavigationController)需要用户提前创建。

:::

Objective-C

方法原型如下:

objc- (void)use:(NSString * _Nonnull)url 
 parameters:(NSDictionary<NSString *, id> * _Nullable)parameters 
    closure:(void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull))closure;
参数 类型 说明
url NSString * _Nonnull 注册界面对应的跳转地址由于OC无法访问swift中定义的全局变量,因此OC代码中需指定具体的路由地址
parameters NSDictionary<NSString *, id> * _Nullable 传递到下个界面的参数
closure void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) (可选)异步回调

parameters中的导航控制器(UINavigationController)需要用户提前创建。

:::

跳转至内置界面

内置界面路由地址列表

云信 IM UIKit 提供两套风格的 UI 组件库,可任意选择一种使用。

两种风格 UI 界面的路由地址相同,但对应的 page 类型不同,请按需选择实现界面跳转。

基础版 UI 界面路由地址列表

路由地址
UIKit 定义
Page
对应界面
跳转需传入参数
imkit://contact/selector.page ContactUserSelectRouter ContactsSelectedViewController 通讯录人员选择器
imkit://contact/addFriend.page ContactAddFriendRouter FindFriendViewController 添加好友界面
imkit://contact/userInfo.page ContactUserInfoPageRouter ContactUserViewController 用户信息界面 参见跳转至用户信息界面
imkit://contact/blackList.page ContactBlackListRouter BlackListViewController 黑名单界面
imkit://contact/teamList.page ContactGroupRouter TeamListViewController 我的群组界面
imkit://contact/verifyList.page ValidationMessageRouter ValidationMessageViewController 验证消息界面
imkit://chat/p2pChat.page PushP2pChatVCRouter P2PChatViewController 单聊界面 参见跳转至单聊界面
imkit://chat/teamChat.page PushTeamChatVCRouter GroupChatViewController 群聊界面 参见跳转至群聊界面
imkit://team/teamSetting.page TeamSettingViewRouter TeamSettingViewController 群设置界面 参见跳转至群聊设置界面
imkit://search/search.page SearchContactPageRouter ConversationSearchController 好友搜索界面
imkit://mine/userInfo.page MeSettingRouter PersonInfoViewController 我的个人信息界面
imkit://conversation/conversation.page ConversationPageRouter ConversationController 会话列表页

通用版 UI 界面路由地址列表

路由地址
UIKit 定义
Page
对应界面
跳转需传入参数
imkit://contact/selector.page ContactUserSelectRouter FunContactsSelectedViewController 通讯录人员选择器
imkit://contact/addFriend.page ContactAddFriendRouter FunFindFriendViewController 添加好友界面
imkit://contact/userInfo.page ContactUserInfoPageRouter FunContactUserViewController 用户信息界面
imkit://contact/blackList.page ContactBlackListRouter FunBlackListViewController 黑名单界面
imkit://contact/teamList.page ContactGroupRouter FunTeamListViewController 我的群组界面
imkit://contact/verifyList.page ValidationMessageRouter FunValidationMessageViewController 验证消息界面
imkit://chat/p2pChat.page PushP2pChatVCRouter FunP2PChatViewController 单聊界面
imkit://chat/teamChat.page PushTeamChatVCRouter FunGroupChatViewController 群聊界面
imkit://team/teamSetting.page TeamSettingViewRouter FunTeamSettingViewController 群设置界面
imkit://search/search.page SearchContactPageRouter FunConversationSearchController 好友搜索界面
imkit://mine/userInfo.page MeSettingRouter FunPersonInfoViewController 我的个人信息界面
imkit://conversation/conversation.page ConversationPageRouter FunConversationController 会话列表页

内置界面跳转示例

本文主要提供基础版 UI 界面跳转的示例(使用前需提前注册路由),若使用通用版 UI 组件接入,切换注册路由方法即可,例如将 ChatRouter.register() 替换为 ChatRouter.registerFun();ContactRouter.register() 替换为 ContactRouter.registerFun() 等。

跳转至用户信息界面

Swift
swiftRouter.shared.use(ContactUserInfoPageRouter, parameters: ["nav": navigationController as Any, "user" : user], closure: nil)
参数 类型 说明
ContactUserInfoPageRouter String 用户信息界面的跳转地址
nav UINavigationController 导航控制器,需用户提前创建
user User 用户信息模型
closure RouteHandleCallbackClosure (可选)异步回调
Objective-C
objc[[Router shared] use:@"imkit://contact/userInfo.page" parameters:@{@"nav": navigationController, @"user": user} closure:^(id _Nullable result, enum RouterState state, NSString * _Nonnull message) {
        // 处理回调
    }];
参数 类型 说明
nav UINavigationController 导航控制器,需用户提前创建
user User 用户信息模型
closure void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) (可选)异步回调

由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的内置界面路由地址列表

:::

跳转至单聊界面

Swift
swiftRouter.shared.use(PushP2pChatVCRouter, parameters: ["nav": self.navigationController as Any, "session" : session as Any], closure: nil)
参数 类型 说明
PushP2pChatVCRouter String 单聊界面的跳转地址
nav UINavigationController 导航控制器,需用户提前创建
session NIMSession 会话对象
closure RouteHandleCallbackClosure (可选)异步回调
Objective-C
objc[[Router shared] use:@"imkit://chat/p2pChat.page" parameters:@{@"nav": navigationController, @"session": session} closure:^(id _Nullable result, enum RouterState state, NSString * _Nonnull message) {
        // 处理回调
    }];
参数 类型 说明
nav UINavigationController 导航控制器,需用户提前创建
session NIMSession 会话对象
closure void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) (可选)异步回调

由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的内置界面路由地址列表

:::

跳转至群聊界面

Swift
swiftRouter.shared.use(PushTeamChatVCRouter, parameters: ["nav": self.navigationController as Any, "session" : session as Any], closure: nil)
参数 类型 说明
PushTeamChatVCRouter String 群聊界面的跳转地址
nav UINavigationController 导航控制器,需用户提前创建
session NIMSession 会话对象
closure RouteHandleCallbackClosure (可选)异步回调
Objective-C
objc[[Router shared] use:@"imkit://chat/teamChat.page" parameters:@{@"nav": navigationController, @"session": session} closure:^(id _Nullable result, enum RouterState state, NSString * _Nonnull message) {
        // 处理回调
    }];
参数 类型 说明
nav UINavigationController 导航控制器,需用户提前创建
session NIMSession 会话对象
closure void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) (可选)异步回调

由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的内置界面路由地址列表

:::

跳转至群聊设置界面

Swift
swiftRouter.shared.use(TeamSettingViewRouter, parameters: ["nav": navigationController as Any, "teamid": viewmodel.session.sessionId], closure: nil)
参数 类型 说明
TeamSettingViewRouter String 群聊设置页的跳转地址
nav UINavigationController 导航控制器,需用户提前创建
teamid String 群组的 ID
closure RouteHandleCallbackClosure (可选)异步回调
Objective-C
objc[[Router shared] use:@"imkit://team/teamSetting.page" parameters:@{@"nav": navigationController, @"teamid": viewmodel.session.sessionId} closure:^(id _Nullable result, enum RouterState state, NSString * _Nonnull message) {
        // 处理回调
    }];
参数 类型 说明
nav UINavigationController 导航控制器,需用户提前创建
teamid NSString 群组的 ID
closure void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) (可选)异步回调

由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的内置界面路由地址列表

:::

跳转至新增界面

IM UIKit 提供的路由能力,支持根据业务需求新增界面并实现从 IM UIKit 的内置界面跳转至新增界面。

  1. 在通过路由实现跳转前,需调用 register 方法注册新增界面的路由地址。

    方法原型如下:

    Swift
    swiftpublic func register(_ url: String, closure: @escaping RouteAsyncHandle)
    
    参数 类型 说明
    url String 注册界面对应的跳转地址
    closure ([String: Any]) -> Void 传递参数
    Objective-C
    objc- (void)register:(NSString * _Nonnull)url closure:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nonnull))closure;
    
    参数 类型 说明
    url NSString 注册界面对应的跳转地址
    closure void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nonnull) 传递参数

    路由注册机制采用覆盖模式,即相同的 url,后注册的会覆盖之前注册的。

  2. 调用 use 方法进行界面跳转,具体参数说明参见上文的如何跳转

此文档是否对你有帮助?
有帮助
去反馈
  • 如何跳转
  • 跳转至内置界面
  • 内置界面路由地址列表
  • 基础版 UI 界面路由地址列表
  • 通用版 UI 界面路由地址列表
  • 内置界面跳转示例
  • 跳转至用户信息界面
  • 跳转至单聊界面
  • 跳转至群聊界面
  • 跳转至群聊设置界面
  • 跳转至新增界面