React-Native: Dismiss / Exit React-Native View volver a Native

Tengo una aplicación existente en la que estoy trabajando para integrar React-Native para una parte de ella. Tengo problemas para entender cómo 'salir' de reacción nativa y volver a una vista nativa.

Aquí hay un código:

// Main objective-c code that bootstraps the react-native view. This view is loaded as a modal view. MainViewController.m: - (void)viewDidLoad { [super viewDidLoad]; RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"IndexApp" initialProperties:props launchOptions:nil]; rootView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height-49); [self.view addSubview:rootView]; } 

Mis vistas de reacción iniciales son tales:

 render() { return ( <Navigator style={styles.container} ... 

Tengo un button de navigation hacia la derecha en el Navegador que me gustaría "descartar" la vista de reacción y la vista nativa de MainViewController subyacente.

He intentado una callback a MainViewController desde la vista de reacción como tal, pero sin uso:

 RCT_EXPORT_METHOD(dismiss:(NSString *)name location:(NSString *)location) { NSLog(@"dismiss..."); // these don't do anything //[self dismissViewControllerAnimated:YES completion:nil]; //[self.navigationController popViewControllerAnimated:YES]; // anything with _rootView doesn't do anything, ie _rootView removeFromSuperview]; } 

Cualquier ayuda con un enfoque para 'salir' de la vista nativa de reacción y volver a las vistas nativas sería apreciada.

La única forma en que he encontrado esto funciona es esto

La esencia de esto es:

  1. Cree una class de NotificationManager en Obj-C y expóngala como React Module
  2. En el logging ViewController se registra una notificación que cuando recibe los desencadenantes [self dismissViewController ..]

NOTA: ESTO NO FUNCIONA – He dejado esto aquí como un ejemplo de lo que no funciona. Verifique mi otra respuesta para un enfoque que funcione.

Si presenta MainViewController de esta manera, popViewController: debería funcionar

 NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"]; RCTRootView *reactView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"SimpleApp" initialProperties:nil launchOptions:nil]; MainViewController *rootViewController = [MainViewController new]; rootViewController.view = reactView; [[self navigationController] pushViewController:rootViewController animated:YES];