【问题标题】:React-Native Hybrid App: Pop UIViewController that embeds RCTRootViewReact-Native Hybrid App:嵌入 RCTRootView 的 Pop UIViewController
【发布时间】: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


【解决方案1】:

问题解决了!

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

    [navigationController popViewControllerAnimated:YES];
  });
}

【讨论】:

  • 请为swift添加答案
猜你喜欢
  • 2020-02-19
  • 2020-04-22
  • 2021-12-01
  • 2021-04-05
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 2015-12-13
  • 2018-12-03
相关资源
最近更新 更多