界面跳转
更新时间: 2024/07/26 13:39:23
IM UIKit 在NECoreKit 组件中提供统一路由 Router,支持参数传递和回调,实现界面的跳转和模块之间的解耦。
如何跳转
IM UIKit 任意内置界面(如单聊界面)都可以通过路由地址跳转至其他指定界面。跳转至的指定界面,可以是其他内置界面,也可以是您的应用的新增界面。
调用 use
方法进行界面跳转。
方法原型如下:
swift public func use(_ url: String,
parameters: [String: Any]? = nil,
closure: RouteHandleCallbackClosure? = nil)
参数 | 类型 | 说明 |
---|---|---|
url |
String | 注册界面对应的跳转地址
|
parameters |
[String: Any] | 传递到下个界面的参数 |
closure |
RouteHandleCallbackClosure | (可选)异步回调 |
parameters
中的导航控制器(UINavigationController
)需要用户提前创建。
:::
方法原型如下:
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 | 注册界面对应的跳转地址
|
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 |
ContactSelectedViewController |
通讯录人员选择器 | 无 |
imkit://contact/addFriend.page | ContactAddFriendRouter |
FindFriendViewController |
添加好友界面 | 无 |
imkit://contact/userInfo.page | ContactUserInfoPageRouter |
ContactUserViewController |
用户信息界面 | 参见跳转至用户信息界面 |
imkit://contact/blackList.page | ContactBlackListRouter |
BlackListViewController |
黑名单界面 | 无 |
imkit://contact/teamList.page | ContactTeamListRouter |
TeamListViewController |
我的群组界面 | 无 |
imkit://contact/verifyList.page | ValidationMessageRouter |
ValidationMessageViewController |
验证消息界面 | 无 |
imkit://chat/p2pChat.page | PushP2pChatVCRouter |
P2PChatViewController |
单聊界面 | 参见 跳转至单聊界面 |
imkit://chat/teamChat.page | PushTeamChatVCRouter |
TeamChatViewController |
群聊界面 | 参见 跳转至群聊界面 |
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 |
FunContactSelectedViewController |
通讯录人员选择器 | 无 |
imkit://contact/addFriend.page | ContactAddFriendRouter |
FunFindFriendViewController |
添加好友界面 | 无 |
imkit://contact/userInfo.page | ContactUserInfoPageRouter |
FunContactUserViewController |
用户信息界面 | 有 |
imkit://contact/blackList.page | ContactBlackListRouter |
FunBlackListViewController |
黑名单界面 | 无 |
imkit://contact/teamList.page | ContactTeamListRouter |
FunTeamListViewController |
我的群组界面 | 无 |
imkit://contact/verifyList.page | ValidationMessageRouter |
FunValidationMessageViewController |
验证消息界面 | 无 |
imkit://chat/p2pChat.page | PushP2pChatVCRouter |
FunP2PChatViewController |
单聊界面 | 有 |
imkit://chat/teamChat.page | PushTeamChatVCRouter |
FunTeamChatViewController |
群聊界面 | 有 |
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() 等。
跳转至用户信息界面
swiftRouter.shared.use(ContactUserInfoPageRouter, parameters: ["nav": navigationController as Any, "user" : user], closure: nil)
参数 | 类型 | 说明 |
---|---|---|
ContactUserInfoPageRouter |
String | 用户信息界面的跳转地址 |
nav |
UINavigationController | 导航控制器,需用户提前创建 |
user |
NEUserWithFriend | 用户信息模型 |
closure |
RouteHandleCallbackClosure | (可选)异步回调 |
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 |
NEUserWithFriend | 用户信息模型 |
closure |
void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) | (可选)异步回调 |
由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的 内置界面路由地址列表。
:::
跳转至单聊界面
swiftRouter.shared.use(
PushP2pChatVCRouter,
parameters: ["nav": navigationController as Any,
"conversationId": conversationId as Any,
"anchor": anchor],
closure: nil
)
参数 | 类型 | 说明 |
---|---|---|
PushP2pChatVCRouter |
String | 单聊界面的跳转地址 |
nav |
UINavigationController | 导航控制器,需用户提前创建 |
conversationId |
String | 会话 id |
anchor |
V2NIMMessage | 锚点消息 |
closure |
RouteHandleCallbackClosure | (可选)异步回调 |
objc[[Router shared] use:@"imkit://chat/p2pChat.page" parameters:@{@"nav": navigationController, @"conversationId": conversationId, @"anchor": anchor} closure:^(id _Nullable result, enum RouterState state, NSString * _Nonnull message) {
// 处理回调
}];
参数 | 类型 | 说明 |
---|---|---|
nav |
UINavigationController | 导航控制器,需用户提前创建 |
conversationId |
String | 会话 id |
anchor |
V2NIMMessage | 锚点消息 |
closure |
void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) | (可选)异步回调 |
由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的 内置界面路由地址列表。
:::
跳转至群聊界面
swiftRouter.shared.use(
PushTeamChatVCRouter,
parameters: ["nav": navigationController as Any,
"conversationId": conversationId as Any,
"anchor": anchor],
closure: nil
)
参数 | 类型 | 说明 |
---|---|---|
PushTeamChatVCRouter |
String | 群聊界面的跳转地址 |
nav |
UINavigationController | 导航控制器,需用户提前创建 |
conversationId |
String | 会话 id |
anchor |
V2NIMMessage | 锚点消息 |
closure |
RouteHandleCallbackClosure | (可选)异步回调 |
objc[[Router shared] use:@"imkit://chat/teamChat.page" parameters:@{@"nav": navigationController, @"conversationId": conversationId, @"anchor": anchor} closure:^(id _Nullable result, enum RouterState state, NSString * _Nonnull message) {
// 处理回调
}];
参数 | 类型 | 说明 |
---|---|---|
nav |
UINavigationController | 导航控制器,需用户提前创建 |
conversationId |
String | 会话 id |
anchor |
V2NIMMessage | 锚点消息 |
closure |
void (^ _Nullable)(id _Nullable, enum RouterState, NSString * _Nonnull) | (可选)异步回调 |
由于 OC 无法访问 swift 中定义的全局变量,因此 OC 代码中需指定具体的路由地址,注册界面对应的跳转地址。IM UIKit 内置的路由地址见上文的 内置界面路由地址列表。
:::
跳转至群聊设置界面
swiftRouter.shared.use(TeamSettingViewRouter, parameters: ["nav": navigationController as Any, "teamid": viewmodel.sessionId], closure: nil)
参数 | 类型 | 说明 |
---|---|---|
TeamSettingViewRouter |
String | 群聊设置页的跳转地址 |
nav |
UINavigationController | 导航控制器,需用户提前创建 |
teamid |
String | 群组的 ID |
closure |
RouteHandleCallbackClosure | (可选)异步回调 |
objc[[Router shared] use:@"imkit://team/teamSetting.page" parameters:@{@"nav": navigationController, @"teamid": viewmodel.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 的内置界面跳转至新增界面。
-
在通过路由实现跳转前,需调用
register
方法注册新增界面的路由地址。方法原型如下:
Swiftswift
public func register(_ url: String, closure: @escaping RouteAsyncHandle)
参数 类型 说明 url
String 注册界面对应的跳转地址 closure
([String: Any]) -> Void 传递参数 Objective-Cobjc
- (void)register:(NSString * _Nonnull)url closure:(void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nonnull))closure;
参数 类型 说明 url
NSString 注册界面对应的跳转地址 closure
void (^ _Nonnull)(NSDictionary<NSString *, id> * _Nonnull) 传递参数 路由注册机制采用覆盖模式,即相同的 url,后注册的会覆盖之前注册的。
-
调用
use
方法进行界面跳转,具体参数说明参见上文的 如何跳转。