Ios 在现有项目中启动react native后返回本机应用程序

Ios 在现有项目中启动react native后返回本机应用程序,ios,react-native,react-native-android,react-native-ios,Ios,React Native,React Native Android,React Native Ios,我已经成功了。在我的原生应用程序中,我有一个屏幕,屏幕上有一个启动react native屏幕的按钮 在Android中,我可以借助BackAndroid.exitApp()返回上一屏幕。如何在iOS中实现相同的功能?当我在本机和RN之间进行流集成时,我只需在本机应用程序中添加一个挂钩并从RN调用即可。所以在你的例子中,我会这样做 onBackButtonPress() { if (Platform.OS === 'ios') { NativeModules.SomeControll

我已经成功了。在我的原生应用程序中,我有一个屏幕,屏幕上有一个启动
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包

除非用户关闭,否则iOS应用程序不应自行关闭。手动关闭应用可能会导致应用商店拒绝您的应用。请参阅以下教程。第一个屏幕有两个按钮,“玩游戏”按钮(第一个按钮)将启动
react native
屏幕,成功启动
react native
后无法返回第一个屏幕。谢谢,我将尝试此操作。这是否意味着您正在创建自定义ViewController?而facebook文档使用UIViewController。