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. 星际战争(bzoj 3993)

    Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机 ...

  2. hash function 字符串哈希函数

    #include <stdio.h> int hash(const char *str) { ; ;;i++) { if (str[i] == '\0') break; sum += (( ...

  3. linux 源代码目录结构

    Linux源代码目录树结构 (2008-04-21 09:14) 分类: Linux/Unix Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大 ...

  4. hdu 4535(排列组合之错排公式)

    吉哥系列故事——礼尚往来 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  5. codevs——1220 数字三角形(棋盘DP)

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或 ...

  6. RESTful详解(非原创)

    文章大纲 一.什么是RESTful二.为什么要使用RESTful三.RESTful实战四.项目源码下载五.参考文章   一.什么是RESTful 1. RESTful概念   REST 是面向资源的, ...

  7. Dcokerfile 参考

    Dcokerfile 包含了所有用来组装image的命令.通过docker build来自动创建image.   用法 需要指定本地路径作为上下文目录,路径是本地系统的目录.而docker build ...

  8. new子类会先运行父类的构造函数

    发现子类构造函数运行时,先运行了父类的构造函数.为什么呢? 原因:子类的所有构造函数中的第一行,其实都有一条隐身的语句super(); super(): 表示父类的构造函数,并会调用于参数相对应的父类 ...

  9. DedeCMS 列表页调用图集内容多张图片的方法

    新做一个以图片为主的网站,采用的DEDECMS图集,列表页要求直接调内容面的大图,解决方法如下:(主要是采用php的正则匹配函数preg_match_all函数来巩固复习下该函数:preg_match ...

  10. numpy基础语法

    np.zeros(5) [ 0.  0.  0.  0.  0.] 所得类型为数组, numpy.zeros_like(a, dtype=None, order='K', subok=True) 生成 ...