在react-native的項目中跳轉(zhuǎn)到原生iOS頁面

我在github上更新了我學習react-native的一些心得和小技巧著榴,下面的這個例子也在里面添履,如果現(xiàn)在的項目不忙,基本每天都會更新脑又,希望可以幫助到各位讀者暮胧。react-native-learn

如果遇到什么問題可以在評論區(qū)回復(fù),或者加QQ群397885169討論

推薦集成"react-native": "0.44.0"版本,"react": "16.0.0-alpha.6",

需求:

前端時間寫過兩篇關(guān)于在原生iOS項目中新建react-native頁面问麸,并跳轉(zhuǎn)到原生的文章往衷,但昨天有人問我怎么從原生的react-native項目中跳轉(zhuǎn)到自動生成的iOS頁面里。


react-native項目.png

我就研究了一下严卖,發(fā)現(xiàn)其實這個跳轉(zhuǎn)和之前的跳轉(zhuǎn)流程基本是一樣的席舍。
這個例子在我的github項目3中

步驟

原理

如果想從react-native中跳轉(zhuǎn)到自帶的原生頁面,首要的問題就是跳轉(zhuǎn)妄田,怎么跳轉(zhuǎn)衣形。
在react-native中提供給了我們Navigator這個組件狠轻,而原生的iOS也提供了UINavigationController,所以想要跳轉(zhuǎn),我們就需要用到這兩個東西啦倦卖。

  • Navigator
    這個是react-native提供給我們跳轉(zhuǎn)其他頁面的組件,需要在react-native項目中引入Navigator
<View style={{ flex: 1 }}>
    <Navigator
        initialRoute={{ name: 'Root', component: Root }}
        style={{height:64}}
        configureScene={(route) => {
            if (route.sceneConfig) {
                return route.sceneConfig;
            }
        return Navigator.SceneConfigs.PushFromRight;
        } 
    }
        renderScene={(route, navigator) => {
            let Component = route.component;
            return (
                    <Component navigator = {navigator} route = {route} {...route.passProps} />
                )} 
    }
/>
</View>

關(guān)于react-native中Navigator使用的文章網(wǎng)上有很多蕊玷,我在這里就不多寫了应媚,可能以后會寫篇文章說一下我對Navigator的理解。

  • UINavigationController
    這個是原生iOS開發(fā)中用到最多的控件鲁冯,每次跳轉(zhuǎn)的時候都會用到它拷沸,但我們是想要從react-native跳轉(zhuǎn)到這個里面,所以需要在原生的項目中將rootViewController設(shè)置為UINavigationController

AppDelegate.h

// 創(chuàng)建一個原生的導(dǎo)航條
@property (nonatomic, strong) UINavigationController *nav;

AppDelegate.m

// 初始化Nav
  _nav = [[UINavigationController alloc]initWithRootViewController:rootViewController];
  
  self.window.rootViewController = _nav;

這樣我們想要跳轉(zhuǎn)的準備就算是完成了薯演,接下來就是將我們想要跳轉(zhuǎn)的頁面撞芍,傳給react-native,告訴它我要跳轉(zhuǎn)到哪個頁面跨扮。

項目目錄.png

上面是我的項目修改后的項目目錄序无,其中藍色部分是我要跳轉(zhuǎn)的頁面,紅色部分是我告訴react-native跳轉(zhuǎn)的方法衡创。

原生項目中

  • PushNative類

PushNative.h

#import <Foundation/Foundation.h>
// 導(dǎo)入RCTBridgeModule類帝嗡,這個是react-native提供
#import "RCTBridgeModule.h"
// 遵守RCTBridgeModul協(xié)議
@interface PushNative : NSObject<RCTBridgeModule>
@end

PushNative.m

#import "PushNative.h"
#import "RCTBridge.h"

// 導(dǎo)入跳轉(zhuǎn)的頁面
#import "TestController.h"
// 導(dǎo)入AppDelegate,獲取UINavigationController
#import "AppDelegate.h"

@implementation PushNative

RCT_EXPORT_MODULE(PushNative)
// RN跳轉(zhuǎn)原生界面
// RNOpenOneVC指的就是跳轉(zhuǎn)的方法璃氢,下面會用到
RCT_EXPORT_METHOD(RNOpenOneVC:(NSString *)msg){
  
  NSLog(@"RN傳入原生界面的數(shù)據(jù)為:%@",msg);
  //主要這里必須使用主線程發(fā)送,不然有可能失效
  dispatch_async(dispatch_get_main_queue(), ^{
    TestController *one = [[TestController alloc]init];
    
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    [app.nav pushViewController:one animated:YES];
  });
}
  • TestController類
self.navigationItem.title = @"我是原生頁面喲~";

完成上面的步驟之后哟玷,只需要最后一步就可以成功的跳轉(zhuǎn)啦!

react-native項目中

  • NativeModules
    需要導(dǎo)入NativeModules組件一也,這個是官方提供給我們與原生交互的組件巢寡,通過它我們才能調(diào)用到原生的方法
  • 初始化要跳轉(zhuǎn)的方法
// 看到 PushNative 是不是很熟悉喉脖,沒錯這個就是原生中寫的那個類
// 后面一定要一樣哦,前面可以隨意定制讼渊。
var Push = NativeModules.PushNative;
  • 跳轉(zhuǎn)
InteractionManager.runAfterInteractions(()=> {
    // RNOpenOneVC這個也是寫在原生里面的再PushNative中哦~
    Push.RNOpenOneVC('測試');
});

好啦动看,寫到這里我們的跳轉(zhuǎn)就算是大功告成了!如果有什么不懂的地方爪幻,可以去我的項目中看看菱皆。

總結(jié)

學習react-native也好幾個月了,這段時間也是踩坑無數(shù)挨稿,但學習的過程中也是一個成長的過程仇轻,我很喜歡這個感覺。如果大家有什么問題奶甘,可以在簡書里面評論篷店,也可以私信我。
ps:之前沒下簡書這個軟件臭家,所以之前文章的評論都沒怎么看疲陕,但我昨天下了一個。??????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钉赁,一起剝皮案震驚了整個濱河市蹄殃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌你踩,老刑警劉巖诅岩,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異带膜,居然都是意外死亡吩谦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門膝藕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來式廷,“玉大人,你說我怎么就攤上這事芭挽』希” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵览绿,是天一觀的道長。 經(jīng)常有香客問我穗慕,道長饿敲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任逛绵,我火速辦了婚禮怀各,結(jié)果婚禮上倔韭,老公的妹妹穿的比我還像新娘。我一直安慰自己瓢对,他們只是感情好寿酌,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硕蛹,像睡著了一般醇疼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上法焰,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天秧荆,我揣著相機與錄音,去河邊找鬼埃仪。 笑死乙濒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的卵蛉。 我是一名探鬼主播颁股,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼傻丝!你這毒婦竟也來了甘有?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤桑滩,失蹤者是張志新(化名)和其女友劉穎梧疲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體运准,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡幌氮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胁澳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该互。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖韭畸,靈堂內(nèi)的尸體忽然破棺而出宇智,到底是詐尸還是另有隱情,我是刑警寧澤胰丁,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布随橘,位于F島的核電站,受9級特大地震影響锦庸,放射性物質(zhì)發(fā)生泄漏机蔗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萝嘁。 院中可真熱鬧梆掸,春花似錦、人聲如沸牙言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咱枉。三九已至卑硫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間庞钢,已是汗流浹背拔恰。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留基括,地道東北人颜懊。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像风皿,于是被迫代替她去往敵國和親河爹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容