2016-02-09 37 views
5

Ich habe eine bestehende App, die ich für einen Teil der Integration von React-Native arbeiten. Ich bin Probleme beim Verstehen, wie 'reaktiv-native' zu beenden und zu einer nativen Ansicht zurückzukehren.React-Native: Dismiss/Exit React-Native Ansicht zurück zu Native

Hier einige Code:

// 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]; 

} 

Meine anfängliche reagieren Ansichten sind so:

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

Ich habe eine Schaltfläche rechts-nav auf dem Navigator, Ich mag würde die reagieren Blick auf „entlassen“ und die zugrundeliegende native Ansicht von MainViewController.

Ich mag so einen Rückruf Mainviewcontroller aus der reagieren Ansicht versucht, aber ohne Erfolg:

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, i.e. _rootView removeFromSuperview]; 

} 

Jede Hilfe mit einem Konzept für die Ausfahrt "würde die reagieren-native Ansicht und wieder in native Ansichten geschätzt werden.

Antwort

0

ANMERKUNG: DIESES doesn "t-Arbeit - ich dies hier als Beispiel verlassen haben, was nicht funktioniert meine andere Antwort für einen Ansatz prüfen, das funktioniert

Wenn Sie diese Art und Weise vorhanden Mainviewcontroller, popViewController:.. sollte

arbeiten
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]; 
+0

Leider nicht, das scheint zu funktionieren erhält . – dnstevenson

+0

Kann bestätigen, dass dies nicht funktioniert, sorry – Tejas

1

der einzige Weg, habe ich festgestellt das der Kern von ihm this

arbeitet, ist:

  1. eine NotificationManager Klasse in Obj-C erstellen und es freizulegen, wie Module Reagieren
  2. Im Viewcontroller für eine Benachrichtigung registrieren, die als Auslöser [self dismissViewController ..]
Verwandte Themen