在现有项目中启动 React Native 后返回本机应用程序
Go back to native app after launch of react native in existing project
我成功了integrated react native in existing project。在我的本机应用程序中,我有一个带有启动 react-native
屏幕按钮的屏幕。
在 Android
中,我可以在 BackAndroid.exitApp()
的帮助下返回到上一个屏幕。如何在 iOS 中实现相同的功能?
当我在本机和 RN 之间进行流集成时,我只需在我的本机应用程序中添加一个挂钩,然后从 RN 调用它。所以在你的例子中我会做类似
的事情
onBackButtonPress() {
if (Platform.OS === 'ios') {
NativeModules.SomeController.backPressed()
}
else {
BackAndroid.exitApp()
}
}
然后在您的控制器中定义 backPressed()
,以便可以将逻辑放在那里
RCT_EXPORT_METHOD(backPressed) {
// logic to go back e.g. pop view controller or dismiss modal
}
这可以通过关闭应用程序的顶部呈现视图控制器来完成。为了在您的 RCTBridge 实现中获得顶视图控制器,您可以使用此代码。
- (UIViewController *)currentTopViewController
{
UIViewController *topVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
while (topVC.presentedViewController)
{
topVC = topVC.presentedViewController;
}
if ([topVC isKindOfClass:[UINavigationController class]]) {
return [(UINavigationController *)topVC topViewController];
}
return topVC;
}
然后你可以关闭这个视图控制器
[topViewController dismissViewControllerAnimated:YES completion:nil];
我开发了一个小的 npm 包来实现这一点。 Find it here
我成功了integrated react native in existing project。在我的本机应用程序中,我有一个带有启动 react-native
屏幕按钮的屏幕。
在 Android
中,我可以在 BackAndroid.exitApp()
的帮助下返回到上一个屏幕。如何在 iOS 中实现相同的功能?
当我在本机和 RN 之间进行流集成时,我只需在我的本机应用程序中添加一个挂钩,然后从 RN 调用它。所以在你的例子中我会做类似
的事情onBackButtonPress() {
if (Platform.OS === 'ios') {
NativeModules.SomeController.backPressed()
}
else {
BackAndroid.exitApp()
}
}
然后在您的控制器中定义 backPressed()
,以便可以将逻辑放在那里
RCT_EXPORT_METHOD(backPressed) {
// logic to go back e.g. pop view controller or dismiss modal
}
这可以通过关闭应用程序的顶部呈现视图控制器来完成。为了在您的 RCTBridge 实现中获得顶视图控制器,您可以使用此代码。
- (UIViewController *)currentTopViewController
{
UIViewController *topVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
while (topVC.presentedViewController)
{
topVC = topVC.presentedViewController;
}
if ([topVC isKindOfClass:[UINavigationController class]]) {
return [(UINavigationController *)topVC topViewController];
}
return topVC;
}
然后你可以关闭这个视图控制器
[topViewController dismissViewControllerAnimated:YES completion:nil];
我开发了一个小的 npm 包来实现这一点。 Find it here