Demo简单描述:点击底部菜单可切换页面,并且底部为共用。

这个是在设置好导航Navigator之后进行的步骤,只是我个人进行Tab切换的一种思路方法,或许不是最好的,仅供参考一下。

首先我们需要一个全局变量来方便我们进行Tab的当前页面active判断及页面路由的改变,添加currentActiveTab.js:

// 默认为首页
export default{
currentActiveFooterTab: "home"
}

接着我们来写<TabsFooter>,通过全局变量currentActiveFooterTab来判断当前页面Tab的active,同时也要点击可进行页面切换:

TabsFooter.js:

import React, { Component } from 'react';
import {
Navigator
} from 'react-native';
import {
Button,
Container,
Content,
Footer,
FooterTab,
Header,
Icon,
Title
} from 'native-base'; import CourseListView from '../views/CourseListView.js';
import PersonView from './PersonView.js'; import myTheme from '../themes/myTheme';
import CurrentActiveTab from '../services/currentActiveTab.js'; export default class TabsFooter extends Component {
constructor(props) {
super(props);
this.homeTab = false;
this.liveTab = false;
this.spaceTab = false;
this.personTab = false;
if (CurrentActiveTab.currentActiveFooterTab == 'home') {
this.homeTab = true;
}
if (CurrentActiveTab.currentActiveFooterTab == 'live') {
this.liveTab = true;
}
if (CurrentActiveTab.currentActiveFooterTab == 'space') {
this.spaceTab = true;
}
if (CurrentActiveTab.currentActiveFooterTab == 'person') {
this.personTab = true;
}
} _navigate(name, component, type = 'Normal') {
this.props.navigator.push({
component: component,
name: name,
passProps: {
name: name
},
type: type
})
} render() {
return (
<FooterTab theme={myTheme}>
<Button transparent active={this.homeTab} onPress={
()=>{if(CurrentActiveTab.currentActiveFooterTab != 'home') this._navigate('首页',CourseListView)}
}>
<Icon name='ios-home'/>首页
</Button>
<Button transparent active={this.liveTab}>
<Icon name='logo-youtube'/>直播
</Button>
<Button transparent active={this.spaceTab}>
<Icon name='md-chatbubbles'/>广场
</Button>
<Button transparent active={this.personTab} onPress={
()=>{if(CurrentActiveTab.currentActiveFooterTab != 'person') this._navigate('个人',PersonView)}
}>
<Icon name='md-person'/>个人
</Button>
</FooterTab>
)
}
};

在首页的页面,也就是“课程”页面,我们要进行全局变量的改变,同时也要将navigator传到TabsFooter中:

import React, { Component } from 'react';
import {
Navigator,
Text
} from 'react-native';
import {
Button,
Container,
Content,
Footer,
FooterTab,
Header,
Icon,
Title
} from 'native-base'; import CourseDetailView from './CourseDetailView.js';
import TabsFooter from './TabsFooter.js'; import myTheme from '../themes/myTheme';
import CurrentActiveTab from '../services/currentActiveTab.js'; export default class CourseListView extends Component {
constructor(props) {
super(props);
CurrentActiveTab.currentActiveFooterTab = 'home';
} _navigate(name,component, type = 'Normal') {
this.props.navigator.push({
component: component,
name: name,
passProps: {
name: name
},
type: type
})
} render() {
return (
<Container theme={myTheme}>
<Header>
<Title>课程</Title>
</Header>
<Content>
<Button block style={{marginTop:30}} onPress={()=>this._navigate('课程详情',CourseDetailView)}>我是课程</Button>
</Content>
<Footer>
<TabsFooter navigator={this.props.navigator} />
</Footer>
</Container>
);
}
}

同样的,在个人中心页面,我们需要把全局变量设为CurrentActiveTab.currentActiveFooterTab = 'person';

这样就可以实现Tab的切换了,TabActive样式我们可以通过自定义设置。

底部TabsFooter的更多相关文章

  1. CSS布局之div交叉排布与底部对齐--flex实现

    最近在用wordpress写页面时,设计师给出了一种网页排布图样,之前从未遇到过,其在电脑上(分辨率大于768px)的效果图如下: 而在手机(分辨率小于等于768px)上要求这样排列: 我想到了两种方 ...

  2. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  3. js判断窗体或容器滚动条到底部

    NO1---jquery判断窗体滚动条到底部 $(window).scroll(function () {if ($(window).scrollTop() >= $(document).hei ...

  4. [deviceone开发]-底部弹出选择

    一.简介 个人上传的第一个示例源码,两天空闲时间写的,一点简单组件,写的挺乱还没啥注释,仅供新手学习. 底部弹出选择,可滑动选择选项,如果停留在选项中间,可自动校正位置,加了一点简单的动画效果,需要的 ...

  5. 块级标签包含行内标签底部出现3px间隔的解决办法

    当块级标签(如div)内包含了行内标签(如img),则外层元素与内层元素底部会出现3px的间隔: 代码如下: <!doctype html> <html lang="en& ...

  6. navigationController 去掉背景图片、去掉底部线条

    //去掉背景图片 [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMe ...

  7. Android 底部弹出Dialog(横向满屏)

    项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay ...

  8. RecyclerView如何消除底部的分割线

    最近遇到一个问题,用RecyclerView显示数据,纵向列表显示,添加默认分割线.   问题是:底部也会显示分割线,这很影响美观.   怎么解决这个问题呢?我想了很多办法,毫无头绪...   最后, ...

  9. 一个将 footer 保持在底部的最好方法

    原文: Quick Tip: The Best Way To Make Sticky Footers 当你在布局网页时,有可能会遇到类似下面的这种情况 导致这一问题的原因是页面内容太少,无法将内容区域 ...

随机推荐

  1. 洛谷P1965 转圈游戏 [NOIP2013]

    题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此 ...

  2. URL重写IIS7(URL Rewrite Module) 比之前的urlrewrite更方便使用

    原文发布时间为:2011-02-24 -- 来源于本人的百度文章 [由搬家工具导入] 微软在IIS7中添加了URL的重写模块,并且免费使用,可以导入.htaccess规则,确实是个不错的选择 URL ...

  3. RowFilter 对于已获取到的dataset进行过滤

    原文发布时间为:2009-11-12 -- 来源于本人的百度文章 [由搬家工具导入] DataView的属性RowFilter使用方法 p.s. 重点在于DataView是DateTable相关联的一 ...

  4. ng-show和ng-hide的进阶应用

    在数据列表渲染的时候,我们可能不仅有一层数据,可能是三级甚至更多,如果我们要显示或者隐藏对应的数据,那么就需要给数据进行子scope的绑定.如下 html <div ng-app="d ...

  5. 调用已发布的WebService

    WebService服务演示 登录http://www.webxml.com.cn

  6. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---3

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...

  7. shell script timer and 無限迴圈

    while : do echo " infinite loop" sleep 2; done

  8. 無法使用 adb push file,Read-only file system

    adb root adb remount adb push xxx /system/etc/xxx failed to copy 'xxx' to '/system/etc/xxx': couldn' ...

  9. Android 设置图片倒影效果

    首先,贴出效果图: 1.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  10. .NET 下二维码解决方案

    使用Zint和Zxing实现二维码的编码与解码(Using open-source tools to generate and decode Q-R code) 1.Zint生成二维码 http:// ...