Integruję komponenty w istniejącej aplikacji na iOS napisanej w Objective-C/Swift.React-Native Hybrid App: Pop UIViewController, który osadza RCTRootView
Jako administrator widoku aplikacji mojej aplikacji używam UINavigationController
.
W jednej z wielu kontrolerów widoku mojej aplikacji, mam przycisk, który pchania rzutem Controller w kontroler nawigacyjny, który zawiera następujący kod:
@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
zwraca Navigator
że zarządzanie wieloma React- Składniki macierzyste:
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}
/>
}
/>
);
Ten przepływ pracy działa dobrze. Jedyne, czego potrzebuję, to sposób na pobicie ReactNativeViewController
z mojego UINavigationController
po naciśnięciu przycisku Back
na głównym komponencie React-Native.
Próbowałem następujących ale bez powodzenia:
Tworzenie Native moduł z jednej metody
popLastViewController
że pop wyświetlany UIViewController, który jest wyświetlany z UINavigationController:@implementation RNNavigationControllerBridge RCT_EXPORT_MODULE() RCT_EXPORT_METHOD(popLastViewController) { UINavigationController *navigationController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController]; [navigationController popViewControllerAnimated:NO]; } @end
połączeń powyższa metoda po naciśnięciu przycisku Wstecz:
onPress={() => { if (index === 0) { NativeViewsManager.popLastViewController(); } else { navigator.pop(); } }}
Ale to nie działa.
Jakieś sugestie?
Witam, twoje ustawienie tutaj widoku głównego jest takie samo w appdelegate lub innym katalogu głównym? – Ramakrishna
Ten z appdelegate –
Chcę wiedzieć jaka jest różnica między ustawieniem widoku głównego w delegacie aplikacji iw tym kontrolerem widoku? W jaki sposób będzie użyteczne, jeśli ustawimy widok główny w widoku kontrolera? Plz, pomóżcie mi w tym ... – Ramakrishna