【发布时间】:2015-11-11 12:16:46
【问题描述】:
我正在将组件集成到用 Objective-C/Swift 编写的现有 iOS 应用程序中。
作为我应用的根视图控制器,我使用UINavigationController。
在我的应用程序的多个视图控制器之一中,我有一个按钮,用于在包含以下代码的导航控制器中推送视图控制器:
@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 返回一个管理多个 React-Native 组件的Navigator:
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}
/>
}
/>
);
该工作流程运行良好。我唯一需要的是在 React-Native 主组件上按下按钮 Back 时从我的 UINavigationController 弹出 ReactNativeViewController 的方法。
我尝试了以下方法,但没有成功:
-
使用单个方法
popLastViewController创建一个本机模块,该方法会弹出从 UINavigationController 显示的 UIViewController:@implementation RNNavigationControllerBridge RCT_EXPORT_MODULE() RCT_EXPORT_METHOD(popLastViewController) { UINavigationController *navigationController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController]; [navigationController popViewControllerAnimated:NO]; } @end -
点击返回按钮时调用上述方法:
onPress={() => { if (index === 0) { NativeViewsManager.popLastViewController(); } else { navigator.pop(); } }}
但这不起作用。
有什么建议吗?
【问题讨论】:
-
嗨,您在此处设置的根视图与 appdelegate 或其他根中的相同?
-
appdelegate 的那个
-
我想知道在应用委托和这个视图控制器中设置根视图有什么区别?如果我们在视图控制器中设置根视图会有什么用?请帮我解决这个问题...
标签: ios uiviewcontroller uinavigationcontroller react-native