gpt4 book ai didi

ios - React-Native 混合应用程序 : Pop UIViewController that embeds RCTRootView

转载 作者:可可西里 更新时间:2023-11-01 04:28:48 25 4
gpt4 key购买 nike

我正在将组件集成到使用 Objective-C/Swift 编写的现有 iOS 应用中。

作为我的应用程序的 Root View Controller ,我使用 UINavigationController

在我的应用程序的多个 View Controller 之一中,我有一个按钮可以在包含以下代码的导航 Controller 中推送一个 View Controller :

@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 创建 native 模块,该方法弹出从 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();
    }
    }}

但这行不通。

有什么建议吗?

最佳答案

问题解决了!

RCT_EXPORT_METHOD(popLastViewController) {
dispatch_async(dispatch_get_main_queue(), ^{
UINavigationController *navigationController = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];

[navigationController popViewControllerAnimated:YES];
});
}

关于ios - React-Native 混合应用程序 : Pop UIViewController that embeds RCTRootView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33650360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com