[ES6-iOSCode]React Native控件之Navigator組件詳解以及實(shí)例

(一)簡(jiǎn)介:

導(dǎo)航組件Navigator可以讓我們客戶端在不同的頁(yè)面見(jiàn)進(jìn)行切換烙荷。為了達(dá)到這樣的功能彩届,Navigator提供了路由對(duì)象功能進(jìn)行區(qū)分識(shí)別每一個(gè)頁(yè)面改基。同時(shí)我們可以通過(guò)renderScene方法豺旬,Navaigator根據(jù)指定的路由進(jìn)行渲染指定的界面霉翔。

除了以上功能之外睁蕾,為了改變頁(yè)面切換的動(dòng)畫或者頁(yè)面的手勢(shì),該組件還提供configureScene屬性來(lái)進(jìn)行獲取指定路由頁(yè)面的配置對(duì)象信息债朵。對(duì)于頁(yè)面切換動(dòng)畫或者更多的屏幕配置選項(xiàng)信息詳情可以查看Navigator.SceneConfigs

關(guān)于動(dòng)畫手勢(shì)還有如下一些屬性:

1.PushFromRight
2.FloatFromRight
3.FloatFromLeft
4.FloatFromBottom
5.FloatFromBottomAndroid
6.FadeAndroid
7.HorizontalSwipeJump
8.HorizontalSwipeJumpFromRight
9.VerticalUpSwipeJump
10VerticalDownSwipeJump
更多屬性大家可以進(jìn)行修改NavigatorSceneConfigs.js該文件即可

(二)導(dǎo)航器方法

在使用導(dǎo)航器的時(shí)候子眶,如果你已經(jīng)獲取了導(dǎo)航器對(duì)象的引用,我們可以進(jìn)行調(diào)用以下一些方法來(lái)實(shí)現(xiàn)頁(yè)面導(dǎo)航功能:

getCurrentRoutes() 該進(jìn)行返回存在的路由列表信息
jumpBack() 該進(jìn)行回退操作 但是該不會(huì)卸載(刪除)當(dāng)前的頁(yè)面
jumpForward() 進(jìn)行跳轉(zhuǎn)到相當(dāng)于當(dāng)前頁(yè)面的下一個(gè)頁(yè)面
jumpTo(route) 根據(jù)傳入的一個(gè)路由信息序芦,跳轉(zhuǎn)到一個(gè)指定的頁(yè)面(該頁(yè)面不會(huì)卸載刪除)
push(route) 導(dǎo)航切換到一個(gè)新的頁(yè)面中臭杰,新的頁(yè)面進(jìn)行壓入棧。通過(guò)jumpForward()方法可以回退過(guò)去
pop() 當(dāng)前頁(yè)面彈出來(lái)谚中,跳轉(zhuǎn)到棧中下一個(gè)頁(yè)面渴杆,并且卸載刪除掉當(dāng)前的頁(yè)面
replace(route) 只用傳入的路由的指定頁(yè)面進(jìn)行替換掉當(dāng)前的頁(yè)面
replaceAtIndex(route,index) 傳入路由以及位置索引,使用該路由指定的頁(yè)面跳轉(zhuǎn)到指定位置的頁(yè)面
replacePrevious(route) 傳入路由宪塔,通過(guò)指定路由的頁(yè)面替換掉前一個(gè)頁(yè)面
resetTo(route) 進(jìn)行導(dǎo)航到新的界面磁奖,并且重置整個(gè)路由棧
immediatelyResetRouteStack(routeStack) 該通過(guò)一個(gè)路由頁(yè)面數(shù)組來(lái)進(jìn)行重置路由棧
popToRoute(route) 進(jìn)行彈出相關(guān)頁(yè)面,跳轉(zhuǎn)到指定路由的頁(yè)面某筐,彈出來(lái)的頁(yè)面會(huì)被卸載刪除
popToTop() 進(jìn)行彈出頁(yè)面比搭,導(dǎo)航到棧中的第一個(gè)頁(yè)面,彈出來(lái)的所有頁(yè)面會(huì)被卸載刪除

(三)導(dǎo)航器屬性風(fēng)格

configureScene function 方法南誊,該為可選的方法進(jìn)行配置頁(yè)面切換動(dòng)畫和手勢(shì)身诺。該會(huì)通過(guò)路由和路由棧兩個(gè)參數(shù)調(diào)用,進(jìn)行返回一個(gè)頁(yè)面參數(shù)配置對(duì)象:(route, routeStack) => Navigator.SceneConfigs.FloatFromRight
initialRoute object 參數(shù)對(duì)象 進(jìn)行設(shè)置導(dǎo)航初始化的路由頁(yè)面抄囚。路由是標(biāo)識(shí)導(dǎo)航器渲染標(biāo)識(shí)每一個(gè)頁(yè)面的對(duì)象戚长。initialRoute必須為initialRouteStack中的路由。同時(shí)initialRoute默認(rèn)為initialRouteStack中路由棧的最后一項(xiàng)
initialRouteStack [object] 參數(shù)對(duì)象數(shù)組 該是一個(gè)初始化的路由數(shù)組進(jìn)行初始化怠苔。如果initalRoute屬性沒(méi)有設(shè)置的話同廉,那么就必須設(shè)置initialRouteStack屬性,使用該最后一項(xiàng)作為初始路由柑司。 如果initalRouteStack屬性沒(méi)有設(shè)置的話迫肖,該會(huì)生成只包含initalRoute值的數(shù)組
navigationBar node 該為可選的參數(shù),在頁(yè)面切換中用來(lái)提供一個(gè)導(dǎo)航欄
navigator object 該為可選參數(shù)攒驰,可以從父類導(dǎo)航器中獲取導(dǎo)航器對(duì)象
onDidFoucs function 該方法已經(jīng)廢棄蟆湖,我們可以使用navigationContext.addListener('didfocus',callback)方法進(jìn)行替代。該會(huì)在每次頁(yè)面切換完成或者初始化之后進(jìn)行調(diào)用該方法玻粪。該參數(shù)為新頁(yè)面的路由
onWillFocus function 該方法已經(jīng)廢棄隅津,我們可以使用navigationContext.addListener('willfocus',callback)方法進(jìn)行替代诬垂。該會(huì)頁(yè)面每次進(jìn)行切換之前調(diào)用
renderScene function 該為必須調(diào)用的方法,該用來(lái)渲染每一個(gè)路由指定的頁(yè)面伦仍。參數(shù)為路由以及導(dǎo)航器對(duì)象兩個(gè)參數(shù)结窘,具體是方法如下:(route, navigator) =><MySceneComponent title={route.title} navigator={navigator} />
sceneStyle 樣式風(fēng)格,該繼承了View視圖的所有樣式風(fēng)格充蓝∷矸悖可以參照:點(diǎn)擊查看View樣式。 該設(shè)置用于每個(gè)頁(yè)面容器的風(fēng)格

(四)導(dǎo)航器實(shí)例

上面給大家介紹一下導(dǎo)航器組件的基本使用和屬性谓苟,下面給大家演示一下導(dǎo)航器Navigator的實(shí)例使用(通過(guò)官方實(shí)例修改)官脓,具體代碼如下:

import React, { Component } from 'react';
import {    AppRegistry,  
  StyleSheet,  
  Text,  
  View,    
TouchableHighlight,   
 Navigator
} from 'react-native';

//創(chuàng)建組件
class NavButton extends React.Component {
  render() {
    return (
      <TouchableHighlight
        style={styles.button}
        underlayColor="#B5B5B5"
        onPress={this.props.onPress}>
        <Text style={styles.buttonText}>{this.props.text}</Text>
      </TouchableHighlight>
    );
  }
}
class NavMenu extends React.Component {
  render() {
    return (
      <View style={styles.scene}>
        <Text style={styles.messageText}>{this.props.message}</Text>
        <NavButton
          onPress={() => {
            this.props.navigator.push({
              message: '向右拖拽關(guān)閉頁(yè)面',
              sceneConfig: Navigator.SceneConfigs.FloatFromRight,
            });
          }}
          text="從右邊向左切入頁(yè)面(帶有透明度變化)"
        />
        <NavButton
          onPress={() => {
            this.props.navigator.push({
              message: '向下拖拽關(guān)閉頁(yè)面',
              sceneConfig: Navigator.SceneConfigs.FloatFromBottom,
            });
          }}
          text="從下往上切入頁(yè)面(帶有透明度變化)"
        />
        <NavButton
          onPress={() => {
            this.props.navigator.pop();
          }}
          text="頁(yè)面彈出(回退一頁(yè))"
        />
        <NavButton
          onPress={() => {
            this.props.navigator.popToTop();
          }}
          text="頁(yè)面彈出(回退到最后一頁(yè))"
        />
      </View>
    );
  }
}
class NavigatorDemo extends Component {
  render() {
    return (
      <Navigator
        style={styles.container}
        initialRoute={{ message: '初始頁(yè)面', }}
        renderScene={ (route, navigator) => <NavMenu
            message={route.message}
            navigator={navigator}
          />}
         configureScene={(route) => {
          if (route.sceneConfig) {
            return route.sceneConfig;
          }
          return Navigator.SceneConfigs.FloatFromBottom;
        }}
      />
    );
  }
}
const styles = StyleSheet.create({
   container: {
    flex: 1,
   },
   messageText: {
    fontSize: 17,
    fontWeight: '500',
    padding: 15,
    marginTop: 50,
    marginLeft: 15,
  },
  button: {
    backgroundColor: 'white',
    padding: 15,
    borderBottomWidth: StyleSheet.hairlineWidth,
    borderBottomColor: '#CDCDCD',
  },
});
 
AppRegistry.registerComponent('NavigatorDemo', () => NavigatorDemo);


Demo下載: http://pan.baidu.com/s/1hshmaX2 密碼: cwk2
效果:

Navigator.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涝焙,隨后出現(xiàn)的幾起案子卑笨,更是在濱河造成了極大的恐慌,老刑警劉巖仑撞,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赤兴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡派草,警方通過(guò)查閱死者的電腦和手機(jī)搀缠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門铛楣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)近迁,“玉大人,你說(shuō)我怎么就攤上這事簸州〖撸” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵岸浑,是天一觀的道長(zhǎng)搏存。 經(jīng)常有香客問(wèn)我,道長(zhǎng)矢洲,這世上最難降的妖魔是什么璧眠? 我笑而不...
    開(kāi)封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮读虏,結(jié)果婚禮上责静,老公的妹妹穿的比我還像新娘。我一直安慰自己盖桥,他們只是感情好灾螃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著揩徊,像睡著了一般腰鬼。 火紅的嫁衣襯著肌膚如雪嵌赠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天熄赡,我揣著相機(jī)與錄音姜挺,去河邊找鬼。 笑死本谜,一個(gè)胖子當(dāng)著我的面吹牛初家,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乌助,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼溜在,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了他托?” 一聲冷哼從身側(cè)響起掖肋,我...
    開(kāi)封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赏参,沒(méi)想到半個(gè)月后志笼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡把篓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纫溃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韧掩。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紊浩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疗锐,到底是詐尸還是另有隱情坊谁,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布滑臊,位于F島的核電站口芍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雇卷。R本人自食惡果不足惜鬓椭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望关划。 院中可真熱鬧小染,春花似錦、人聲如沸祭玉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脱货。三九已至岛都,卻和暖如春律姨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臼疫。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工择份, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烫堤。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓荣赶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸽斟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拔创,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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