Ich integriere Komponenten in eine bestehende iOS App, die in Objective-C/Swift geschrieben wurde.React-Native Hybrid-App: Pop UIViewController, der RCTRootView einbettet
Als Root-View-Controller meiner App verwende ich eine UINavigationController
.
In einer der mehreren View-Controller meiner app, habe ich eine Schaltfläche, die eine View-Controller in der Navigation Controller drücken, das den folgenden Code enthält:
@objc class ReactNativeViewController: UIViewController {
override func viewDidLoad() {
let jsCodeLocation = NSURL(string: "http://localhost:8081/index.ios.bundle?platform=ios&dev=true")
let contactsView = RCTRootView(bundleURL: jsCodeLocation, moduleName: "MainComponent", initialProperties: nil, launchOptions: nil)
self.view.addSubview(contactsView)
contactsView.frame = self.view.bounds;
}
}
MainComponent
gibt eine Navigator
, die mehrere lauten die Reaktionen verwalten Native Komponenten:
return (
<Navigator
initialRoute={initialRoute}
renderScene={(route, navigator) => {
if (route.component) {
return <route.component navigator={navigator} {...route.passProps} />;
}
}}
navigationBar={
<Navigator.NavigationBar
routeMapper={this.NavigationBarRouteMapper}
style={styles.navBar}
/>
}
/>
);
Dieser Workflow funktioniert einwandfrei. Die einzige Sache, die ich brauche, ist eine Möglichkeit, ReactNativeViewController
von meinem UINavigationController
zu knallen, wenn der Knopf Back
auf die react-native Hauptkomponente getroffen wurde.
habe ich versucht, die folgend, aber ohne Glück:
Eine Native Module erstellen mit einer einzigen Methode
popLastViewController
, die die angezeigten UIViewController Pop, das von den UINavigationController angezeigt:@implementation RNNavigationControllerBridge RCT_EXPORT_MODULE() RCT_EXPORT_METHOD(popLastViewController) { UINavigationController *navigationController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController]; [navigationController popViewControllerAnimated:NO]; } @end
Anruf Die obige Methode, wenn die Zurück-Taste gedrückt wurde:
onPress={() => { if (index === 0) { NativeViewsManager.popLastViewController(); } else { navigator.pop(); } }}
Aber das funktioniert nicht.
Irgendwelche Vorschläge?
Hallo, setzen Sie hier die root-Ansicht wie im Appdelegate oder einem anderen root? – Ramakrishna
Die aus dem Appdelegate –
Ich möchte wissen, was ist der Unterschied zwischen der Einstellung der Stammansicht in der App-Delegate und in dieser Ansicht Controller? Wie wird es nützlich sein, wenn wir die Root-Ansicht im View-Controller festlegen? Plz, hilf mir dabei ... – Ramakrishna