5

Objective-C/Swiftで書かれた既存のiOSアプリにコンポーネントを統合しています。リアクションネイティブハイブリッドアプリ:RCTRootViewを埋め込んだPopView UIViewController

私のアプリのルートビューコントローラとして、私は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-を管理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} 
     /> 
    } 
    /> 
); 

そのワークフローは正常に動作します。私が必要とするのは、ボタンBackが主要なReact-NativeコンポーネントにヒットしたときにReactNativeViewControllerを私のUINavigationControllerからポップする方法です。

私は次のことを試してみましたが、運と:

  • UINavigationControllerから表示され、表示のUIViewControllerをポップシングル方法popLastViewControllerでネイティブモジュールを作成します。

    @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(); 
        } 
    }} 
    

しかし、それは動作しません。

提案がありますか?

+0

こんにちは、ここにあなたの設定appdelegateまたは別のルートで同じようにルートビュー? – Ramakrishna

+0

appdelegateからのもの –

+0

私は、アプリケーションデリゲートとこのビューコントローラでルートビューを設定することの違いは何ですか?ビューコントローラでルートビューを設定すると、どのように役立ちますか? Plz、これを手伝ってください... – Ramakrishna

答えて

7

問題が解決しました。

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

    [navigationController popViewControllerAnimated:YES]; 
    }); 
} 
関連する問題