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. ConcurrentHashMap 1.8为什么要使用CAS+Synchronized取代Segment+ReentrantLock

    大家应该都知道ConcurrentHashMap在1.8的时候有了很大的改动,当然,我这里要说的改动不是指链表长度大于8就转为红黑树这种常识,我要说的是ConcurrentHashMap在1.8为什么 ...

  2. (三)Spring 依赖注入

    一.Spring框架本身有四大原则: 使用POJO进行轻量级和最小侵入式开发. 通过依赖注入和接口变成实现松耦合. 通过AOP和默认习惯进行声明式变成. 使用AOP和模板减少模式化代码. Spring ...

  3. [转].net创建XML文件的两种方法

    原文发布时间为:2009-08-26 -- 来源于本人的百度文章 [由搬家工具导入] 方法一:按照XML的结构一步一步的构建XML文档.    通过.Net FrameWork SDK中的命名空间&q ...

  4. 使用T4模板创建一个例子

    1.创建项目,添加新项,名称处填写Messages.tt,如下图: 添加后,Messages.tt文件内容如下: <#@ template debug="false" hos ...

  5. 关于Struts2中param的作用

    1.页面传参与配置传参的区别: 如果页面Form表单的参数在Action类中有相应的setter方法,则会优先取页面Form表单传过来的值,如果页面没有该属性同名的参数,则会从配置文件中取同名的参数值 ...

  6. duilib入门简明教程 -- XML基础类(7) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343743.html 现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是 ...

  7. php --图片加图片水印

    最近在做一个视频网站需要视频有一个封面图片,但是不能是普通的图片,能让别人一眼看出来是 视频,所以我就在图片上面加了视频播放器的那种水印,具体代码如下: <?php/** * 图片加水印(适用于 ...

  8. 通过使用集合Properties完成JDBC的连接工具类

    1.将数据库连接对象所需参数保存在本地文件中 database.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localh ...

  9. 用C#将XML转换成JSON

    本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...

  10. Java IO 学习(零)概述

    参考文献 Doug Lea的  <Scalable IO in Java> Java NIO trick and trap IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇) 网络编程释疑 ...