Navigator和NavigatorIOS

在开发中,需要实现多个界面的切换,这时候就需要一个导航控制器来进行各种效果的切换。在React Native中RN为我们提供了两个组件:Navigator和NavigatorIOS。

关于Navigator的介绍请查看之前的介绍文章:http://blog.csdn.net/xiangzhihong8/article/details/52624367

在使用Navigator导航器的时候需要重点掌握Navigator的几个方法:

getCurrentRoutes() 该进行返回存在的路由列表信息

jumpBack() 该进行回退操作 但是该不会卸载(删除)当前的页面

jumpForward() 进行跳转到相当于当前页面的下一个页面

jumpTo(route) 根据传入的一个路由信息,跳转到一个指定的页面(该页面不会卸载删除)

push(route) 导航切换到一个新的页面中,新的页面进行压入栈。通过jumpForward()方法可以回退过去

pop() 当前页面弹出来,跳转到栈中下一个页面,并且卸载删除掉当前的页面

replace(route) 只用传入的路由的指定页面进行替换掉当前的页面

replaceAtIndex(route,index) 传入路由以及位置索引,使用该路由指定的页面跳转到指定位置的页面

replacePrevious(route) 传入路由,通过指定路由的页面替换掉前一个页面

resetTo(route) 进行导航到新的界面,并且重置整个路由栈

immediatelyResetRouteStack(routeStack) 该通过一个路由页面数组来进行重置路由栈

popToRoute(route) 进行弹出相关页面,跳转到指定路由的页面,弹出来的页面会被卸载删除

popToTop() 进行弹出页面,导航到栈中的第一个页面,弹出来的所有页面会被卸载删除

  1. <Navigator
  2. initialRoute={{ name: defaultName, component: defaultComponent }}
  3. configureScene={(route) => {
  4. return Navigator.SceneConfigs.HorizontalSwipeJumpFromRight;
  5. }}
  6. renderScene={(route, navigator) => {
  7. let Component = route.component;
  8. return <Component {...route.params} navigator={navigator} />
  9. }}
  10. />

Navigator.IOS

常用方法:

push(route)

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

pop()

回到上一页。

popN(n)

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

replace(route)

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

replacePrevious(route)

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

replacePreviousAndPop(route)

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

resetTo(route)

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

popToRoute(route)

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

popToTop()

回到最顶层的路由。

示例小程序



1,定义外部组件

  1. <TabBarIOS.Item
  2. icon={require('image!tabbar_home')}
  3. title="首页"
  4. selected={this.state.selectedItem == 'home'}
  5. onPress={()=>{this.setState({selectedItem:'home'})}}
  6. >
  7. <NavigatorIOS
  8. initialRoute ={ {
  9. component: Home, //具体的板块
  10. title:'网易新闻', //导航栏标题
  11. }}
  12. />
  13. </TabBarIOS.Item>

Main主页面代码

  1. import React, { Component } from 'react';
  2. import {
  3. AppRegistry,
  4. StyleSheet,
  5. Text,
  6. View,
  7. TabBarIOS,
  8. NavigatorIOS
  9. } from 'react-native';
  10. // 引入外部的组件(此处注意是相当于了项目根目录)
  11. var Home = require('../Component/Home');
  12. var Message = require('../Component/Message');
  13. var Find = require('../Component/Find');
  14. var Mine = require('../Component/Mine');
  15. var Main = React.createClass({
  16. // 初始化设置
  17. getInitialState(){
  18. return{
  19. // 设置默认选中的tabBarItem标识
  20. selectedItem:'home', // 默认让首页被选中
  21. }
  22. },
  23. render() {
  24. return (
  25. <TabBarIOS
  26. tintColor="orange"
  27. >
  28. {/*首页*/}
  29. <TabBarIOS.Item
  30. icon={require('image!tabbar_home')}
  31. title="首页"
  32. selected={this.state.selectedItem == 'home'}
  33. onPress={()=>{this.setState({selectedItem:'home'})}}
  34. >
  35. <NavigatorIOS
  36. initialRoute ={
  37. {
  38. component: Home, //具体的板块
  39. title:'网易新闻', //导航栏标题
  40. }
  41. }
  42. />
  43. </TabBarIOS.Item>
  44. {/*消息*/}
  45. <TabBarIOS.Item
  46. icon={require('image!tabbar_message_center')}
  47. title="消息"
  48. selected={this.state.selectedItem == 'message'}
  49. onPress={()=>{this.setState({selectedItem:'message'})}}
  50. >
  51. <NavigatorIOS
  52. initialRoute ={
  53. {
  54. component: Message, //具体的板块
  55. title:'消息', //导航栏标题
  56. }
  57. }
  58. />
  59. </TabBarIOS.Item>
  60. {/*发现*/}
  61. <TabBarIOS.Item
  62. icon={require('image!tabbar_discover')}
  63. title="发现"
  64. selected={this.state.selectedItem == 'find'}
  65. onPress={()=>{this.setState({selectedItem:'find'})}}
  66. >
  67. <NavigatorIOS
  68. initialRoute ={
  69. {
  70. component: Find, //具体的板块
  71. title:'发现', //导航栏标题
  72. }
  73. }
  74. />
  75. </TabBarIOS.Item>
  76. {/*我的*/}
  77. <TabBarIOS.Item
  78. icon={require('image!tabbar_profile')}
  79. title="我"
  80. selected={this.state.selectedItem == 'mine'}
  81. onPress={()=>{this.setState({selectedItem:'mine'})}}
  82. >
  83. <NavigatorIOS
  84. initialRoute ={
  85. {
  86. component: Mine, //具体的板块
  87. title:'我', //导航栏标题
  88. }
  89. }
  90. />
  91. </TabBarIOS.Item>
  92. </TabBarIOS>
  93. );
  94. }
  95. });
  96. const styles = StyleSheet.create({
  97. container: {
  98. flex: 1,
  99. justifyContent: 'center',
  100. alignItems: 'center',
  101. backgroundColor: '#F5FCFF',
  102. },
  103. welcome: {
  104. fontSize: 20,
  105. textAlign: 'center',
  106. margin: 10,
  107. },
  108. });
  109. // 输出类
  110. module.exports = Main;

React Native自定义导航条的更多相关文章

  1. [RN] React Native 自定义导航栏随滚动渐变

    React Native 自定义导航栏随滚动渐变 实现效果预览: 代码实现: 1.定义导航栏 NavPage.js import React, {Component} from 'react'; im ...

  2. React Native自定义导航栏

    之前我们学习了可触摸组件和页面导航的使用的使用: 从零学React Native之09可触摸组件 - 从零学React Native之03页面导航 - 经过之前的学习, 我们可以完成一个自定义导航栏了 ...

  3. iOS11自定义导航条上移处理

    image.png 在自定义导航条时,通常会继承系统的UINavigationBar,但如上图,在iOS11上,导航条改动了.自定义导航条代码 -(MBNavigationBar *)myNavBar ...

  4. [RN] React Native 自定义 底部 弹出 选择框 实现

    React Native 自定义 底部选择框 实现 效果如图所示: 实现方法: 一.组件封装 CustomAlertDialog.js import React, {Component} from ' ...

  5. jQuery Mobile 自定义导航条图标

    1.jQuery Mobile 自定义导航条图标

  6. React Native中自定义导航条

    这是2017年年初开始的公司的项目,对于导航条的要求很高,Android和iOS上必须用一致的UI,按钮位置还有各种颜色都有要求,而且要适应各种奇葩要求. 尝试了一下当时React Native自带的 ...

  7. React Native 之导航栏

    一定要参考官网: https://reactnavigation.org/docs/en/getting-started.html 代码来自慕课网:https://www.imooc.com/cour ...

  8. iOS7新特性-完美解决iOS7关于自定义导航条UIBarButtonItem偏移的问题

    前言: 本文由DevDiv社区@Vincent 原创,转载请注明出处! http://www.devdiv.com/iOS_iPhone-ios_ios_uibarbuttonitem_-thread ...

  9. 可自定义导航条功能案例ios项目源码

    可定制的navigationitem ,当我们使用系统的方法设置navigationItem的leftItem或者rightItem时,我们会 发现item位置会有偏差(左边的偏右,右边的偏左).当设 ...

随机推荐

  1. python3爬取女神图片,破解盗链问题

    title: python3爬取女神图片,破解盗链问题 date: 2018-04-22 08:26:00 tags: [python3,美女,图片抓取,爬虫, 盗链] comments: true ...

  2. [HNOI 2012]集合选数

    Description 题库链接 对于任意一个正整数 \(n\) ,求出集合 \(\{1,2,\cdots,n\}\) 的满足约束条件"若 \(x\) 在该子集中,则 \(2x\) 和 \( ...

  3. [COGS 1799][国家集训队2012]tree(伍一鸣)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  4. [HNOI2010]PLANAR

    题目描述 若能将无向图G=(V,E)画在平面上使得任意两条无重合顶点的边不相交,则称G是平面图.判定一个图是否为平面图的问题是图论中的一个重要问题.现在假设你要判定的是一类特殊的图,图中存在一个包含所 ...

  5. luogu2252 取石子游戏

    题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完 ...

  6. [HNOI2016]最小公倍数

    题目描述 给定一张N个顶点M条边的无向图(顶点编号为1,2,...,n),每条边上带有权值.所有权值都可以分解成2a∗3b2^a*3^b2a∗3b 的形式. 现在有q个询问,每次询问给定四个参数u.v ...

  7. 洛谷P3159 [CQOI2012]交换棋子

    巧妙的拆点方式,首先把1看成黑点,0看成空的,几次交换就可以看成一条路径 1)从容量上看,这条路径为1-2-2-2-2-2----2-1 2)从费用上看,这条路径每条边费用都是1 于是用一种巧妙的拆点 ...

  8. Hello,World!!----来自半个新OIer的问候

    为了记录OI生涯的点点滴滴故申请此博客,说是半个新OIer,其实我的OI生涯并不算很短了吧...现在也算是初三下学期了...也算是混迹NOIP第5个年头了.文化课上也没什么临考压力,那就好好准备第5场 ...

  9. poj2406 连续重复子串

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 41110   Accepted: 17099 D ...

  10. [bzoj4922]Karp-de-Chant Number

    来自FallDream的博客,未经允许,请勿转载,谢谢. 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令人捉摸不透,有时候会让水平很高的选手迷之超时. 普遍认为卡常数是埃及人Qa'a ...