React Native 从入门到深入 -- Navigator、NavigatorIOS详解

前言

在前端的开发中,我们需要实现多个页面的切换跳转,iOS中使用Navigation实现页面的跳转,react Native中使用Navigator和NavigatorIOS来实现不同页面间的切换。

一。实现原理及属性

导航器通过路由对象来分辨不同的场景,利用renderScene方法,导航栏可以根据指定的路由来渲染场景。

1.1导航跳转方法

react中的路由的存储方式通过栈来存储的,有先进后出的特性。

getCurrentRoutes()

获取当前栈里的路由,也就是push进来,没有pop掉的那些

jumpBack() 

 跳回之前的路由,当然前提是保留现在的,还可以再跳回来,会给你保留原样。

jumpForward()

上一个方法不是调到之前的路由了么,用这个跳回来就好了。

jumpTo(route) 

跳转到已有的场景并且不卸载。

push(route)

跳转到新的场景,并且将场景入栈,你可以稍后跳转过去

pop() 

跳转回去并且卸载掉当前场景

replace(route)

用一个新的路由替换掉当前场景

replaceAtIndex(route, index) 

 替换掉指定序列的路由场景

replacePrevious(route) 

 替换掉之前的场景

resetTo(route)  

跳转到新的场景,并且重置整个路由栈

immediatelyResetRouteStack(routeStack)

 用新的路由数组来重置路由栈

popToRoute(route) 

 pop到路由指定的场景,在整个路由栈中,处于指定场景之后的场景将会被卸载。

popToTop()

pop到栈中的第一个场景,卸载掉所有的其他场景。

1.2导航属性

configureScene  = {() =>{

return Navigator. SceneConfigs .HorizontalSwipeJump;

}}


可选的函数,用来配置场景动画和手势。会带有两个参数调用,一个是当前的路由,一个是当前的路由栈。然后它应当返回一个场景配置对象.

场景配置对象:

Navigator.SceneConfigs.PushFromRight (默认)

Navigator.SceneConfigs.FloatFromRight

Navigator.SceneConfigs.FloatFromLeft

Navigator.SceneConfigs.FloatFromBottom

Navigator.SceneConfigs.FloatFromBottomAndroid

Navigator.SceneConfigs.FadeAndroid

Navigator.SceneConfigs.HorizontalSwipeJump

Navigator.SceneConfigs.HorizontalSwipeJumpFromRight

Navigator.SceneConfigs.VerticalUpSwipeJump

Navigator.SceneConfigs.VerticalDownSwipeJump

  initialRoute ={{ name: 'home', component: HomeScene }}

定义启动时加载的路由。路由是导航栏用来识别渲染场景的一个对象。initialRoute必须是initialRouteStack中的一个路由。initialRoute默认为initialRouteStack中最后一项。

initialRouteStack      [object]

提供一个路由集合用来初始化。如果没有设置初始路由的话则必须设置该属性。如果没有提供该属性,它将被默认设置成一个只含有initialRoute的数组。

renderScene  function  (route, navigator) =><mySceneComponet title={route.title} navigator = {navigator}> 

两个参数中的route包含的是initial的时候传递的name和component,而navigator是一个我们需要用的Navigator的对象;

所以当我们拿到route中的component的时候,我们就可以将navigator传递给它,正因为如此,我们的组件HomeScene才可以通过  this.props.navigator,拿到路由。

navigationBar    node

可选参数,提供一个在场景切换的时候保持的导航栏。

navigator    object

可选参数,提供从父导航器获得的导航器对象。

onDidFocus    function

每当导航切换完成或初始化之后,调用此回调,参数为新场景的路由。

onWillFocus   function

会在导航切换之前调用,参数为目标路由。

sceneStyle  和View的属性样式一样

将会应用在每个场景的容器上的样式。


1.3默认写法

<Navigator

initialRoute={{name:defaultName,component:defaultComponent}}

configureScene={(route) => {

returnNavigator.SceneConfigs.HorizontalSwipeJumpFromRight;

}}

renderScene={(route,navigator) => {

letComponent=route.component;

return

}}

/>


二、Navigator.IOS

NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面。

2.1  常用的导航器方法

push(route)

导航器跳转到一个新的路由。

pop()

回到上一页。

popN(n)

回到N页之前。当N=1的时候,效果和 pop() 一样。

replace(route)

替换当前页的路由,并立即加载新路由的视图。

replacePrevious(route)

替换上一页的路由/视图。

replacePreviousAndPop(route)

替换上一页的路由/视图并且立刻切换回上一页。

resetTo(route)

替换最顶级的路由并且回到它。

popToRoute(route)

一直回到某个指定的路由。

popToTop()

回到最顶层的路由。

2.2  常用的属性

barTintColor string

导航条的背景颜色。

initialRoute{

component: function,   // 路由到对应的版块

title: string,   // 标题

passProps: object,   // 传递的参数

backButtonIcon: Image.propTypes.source,  // 返回按钮

backButtonTitle: string,  // 返回按钮标题

leftButtonIcon:Image.propTypes.source,

leftButtonTitle: string,

onLeftButtonPress: function,

rightButtonIcon: Image.propTypes.source,

rightButtonTitle: string,

onRightButtonPress: function,

wrapperStyle: [object Object]

}

NavigatorIOS使用"路由"对象来包含要渲染的子视图、它们的属性、以及导航条配置。"push"和任何其它的导航函数的参数都是这样的路由对象。

itemWrapperStyle    View#style

导航器中的组件的默认属性。一个常见的用途是设置所有页面的背景颜色。

navigationBarHidden  bool

一个布尔值,决定导航栏是否隐藏。

shadowHidden bool

一个布尔值,决定是否要隐藏1像素的阴影。

tintColor string

导航栏上按钮的颜色。

titleTextColor string

导航器标题的文字颜色。

translucent bool

一个布尔值,决定是否导航条是半透明的。


注:本组件并非由Facebook官方开发组维护。

这一组件的开发完全由社区主导。如果纯js的方案能够满足你的需求的话,那么我们建议你选择Navigator组件。

原理图:


第一步。设置TabBar


NavigatorIOS在每个TabBarItem中设置

设置属性:


运行结果:




在此学习过程中遇到的问题:


在设置TabBarItem是,只设置属性,运行之后会报这个错误,是因为,TabBarItem中没有组件,确实组件。

今天的完整代码就不在上传,后期会做一个简单的小demo,将详细的把这段时候学习的运用一下,由于今天有bug还有调试出来,固今天就不在上传代码。

谢谢啦!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容