React Native - NavigatorIOS

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

NavigatorIOS 属性

  • barTintColor: 导航栏背景颜色,只设置当前界面的导航栏背景颜色

  • initialRoute() 使用“路由”对象来包含要渲染的子视图、它们的属性、已经导航条配置。“push”和任何其他的导航函数的参数都是这样的路由对象(下面实例模块会详细讲解)

        initialRoute({
            component: function,
            title: string,
            passProps: object,
            backButtonIcon: Image.propTypes.source,//返回按钮的图片
            backButtonTitle: string,//返回按钮的 title
            leftButtonIcon: Image.propTypes.source,// 左按钮图片
            leftButtonTitle: string,
            onLeftButtonPress: function,
            rightButtonIcon: Image.propTypes.source,
            rightButtonTitle: string,
            onRightButtonPress: function,
            wrapperStyle: [object Object]//包裹样式
        })
  • itemWrapperStyle: 导航器中的组件的默认属性。一个常见的用途是设置所有页面的背景颜色

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

  • shadowHidden:布尔值,决定是否要隐藏1像素的阴影

    1像素的阴影.png

  • tintColor:导航栏上按钮的颜色

  • titleTextColor:导航器标题的文字颜色

  • translucent:布尔值,决定导航条是否半透明(注:当不半透明时页面会向下移动导航栏等高的距离,以防止内容被遮盖)

  • interactivePopGestureEnabled:决定是否启用滑动返回手势。不指定此属性时,手势会根据 navigationBar 的显隐情况决定是否启用(显示时启用手势,隐藏时禁用手势),指定此属性后,手势与 navigationBar 的显隐情况无关

  • passProps: 父传给子的对象 myProp

         passProps: { myProp: 'temp 传给 computer 的值' },

子类调用:

          alert(this.props.myProp);

NavigatorIOS 方法

  • push(route):导航器跳转到一个新的路由

  • pop():回到上一页

  • popN():回到N页之前。当 N=1 的时候,效果和 pop() 一样,1是最近的一层,想要调到第 n层 就是N=n+1

  • replace(route):替换当前页的路由,并立即加载新路由的视图

  • replacePrevious(route):替换上一页的路由/视图

  • replacePreviousAndPop(route)替换上一页的路由/视图并且立即切换回上一页

  • resetTO(route):替换最顶级的路由并且回到它

  • replaceAtIndex:替换指定路由

  • popToRoute(route):一直回到某个指定的路由

  • popToTop() 回到最顶层的路由

NavigatorIOS 使用

NavigatorIOS 需要有一个根视图来完成初始化,所以我们需要先创建一个组件来描述这个界面,并将这个组件通过路由的形式告诉 NavigatorIOS,这样就可以将这个界面展示出来

代码例子:

index.ios.js内获得 Home 组件

import Home from './home';

class RNTalk extends Component {
  render() {
    return (
      <Home />
    );
  }
}

// 整体js模块的名称
AppRegistry.registerComponent('RNTalk', () => RNTalk);

home.js

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    TouchableOpacity,
    NavigatorIOS,
} from 'react-native';

//导入子页面 
import Temp from './temp';

//导航栏 初始化NavigatorIOS 用 Home 作为 NavigatorIOS 的根视图
class ReactNativeNavigator extends Component{
    render (){
        return(
            <NavigatorIOS 
            style={{flex:1}} // 此项不设置,创建的导航控制器只能看见导航条而看不到界面
            interactivePopGestureEnabled={true}//决定是否启用滑动返回手势。
            itemWrapperStyle='blue'
            translucent={true}//决定导航条是否半透明
            initialRoute={{//初始化路由
                component:Home,//路由的根视图
                title:'首页',//标题
                }}/>
        );
    }
}

class Home extends Component{
    //点击跳转
    _onPressView (nextRoute){
        //跳转  nextRoute 目的地的路由
        this.props.navigator.push(nextRoute);
    }

    render() {
        //目的地的路由属性
        const nextRoute = {
            component:Temp,//目的地视图
            title:'详情页码',//目的地标题
            titleTextColor:'red',//标题颜色
            shadowHidden:true,//决定是否要隐藏1像素的阴影
            barTintColor:'white',//导航条的背景颜色
            tintColor:'orange',  // 按钮的颜色
            leftButtonTitle:'返回',//导航条的左按钮
            onLeftButtonPress:()=>{//导航条左按钮触发事件
                alert('返回');
            },
            rightButtonTitle:'相册',//导航条的右按钮
            onRightButtonPress:()=>{//导航条右按钮触发事件
                alert('没有该照片');
            },
            itemWrapperStyle:'green',//没有效果 没找到原因
            passProps: { myProp: 'bar' }
          };
        return (
            <View style={styles.container}>  
            <TouchableOpacity onPress={() => {this._onPressView(nextRoute)}}>
            <Text style={styles.textContainer}>点击跳转到 Temp 界面</Text>
            </TouchableOpacity>
        </View>
        );
    }
}
var styles = StyleSheet.create({
    container:{
        // 背景颜色
        backgroundColor:'red',
        flex:1,
        justifyContent:'center',
        alignItems:'center',
    },
    textContainer:{
        fontSize:20,
    }
});

module.exports = ReactNativeNavigator;

temp.js

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    NavigatorIOS,
    TouchableOpacity
} from 'react-native';

import Computer from './computer';
class Temp extends Component{
    _toComputerView(isShadowHidden){
        this.props.navigator.push({
           component:Computer,
           title:'电脑详情',
           rightButtonTitle:'配置',
           navigationBarHidden:isShadowHidden,// 隐藏导航栏
           shadowHidden:true,//决定是否要隐藏1像素的阴影
           onRightButtonPress:()=>{
                alert('CUP  i7');
           },
           passProps: { myProp: 'temp 传给 computer 的值' },
        });
    }
    render(){
        return(
            <View style={styles.container}>
                <TouchableOpacity onPress={() => this._toComputerView(false)}>
                    <Text style={styles.textContainer}>电脑详情(有导航栏)</Text>
                </TouchableOpacity>
                <Text/>
                <TouchableOpacity onPress={() => this._toComputerView(true)}>
                    <Text style={styles.textContainer}>电脑详情(无导航栏)</Text>
                </TouchableOpacity>
                <Text/>
                <TouchableOpacity onPress={() => {this.props.navigator.pop()}}>
                    <Text style={styles.textContainer}>返回上一页面</Text>
                </TouchableOpacity>
            </View>
        );
    }
}

var styles = StyleSheet.create({
    container:{
        // 背景颜色
        backgroundColor:'white',
        flex:1,
        justifyContent:'center',
        alignItems:'center',
    },
    textContainer:{
        fontSize:20,
    }
});
//相当于将组件 Temp 公开出 去将私有的变成共有
module.exports = Temp;

computer.js

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    NavigatorIOS,
    TouchableOpacity
} from 'react-native';

class Computer extends Component{
    _alertMyProp(){
        alert(this.props.myProp);
    }
    render(){
        return(
            <View style={styles.container}>
                <TouchableOpacity onPress={() => {this.props.navigator.pop()}}>
                <Text style={styles.textContainer}>返回上一页面</Text>
                </TouchableOpacity>
                <Text>    </Text>
                <TouchableOpacity onPress={() => {this.props.navigator.popN(2)}}>
                <Text style={styles.textContainer}>返回首页</Text>
                </TouchableOpacity>
                <Text>    </Text>
                <TouchableOpacity onPress={() => {this.props.navigator.popToTop()}}>
                <Text style={styles.textContainer}>回到最顶层的路由</Text>
                </TouchableOpacity>
                <Text>    </Text>
                <TouchableOpacity onPress={() => {this._alertMyProp()}}>
                <Text style={styles.textContainer}>展示传值</Text>
                </TouchableOpacity>
            </View>
        );
    }
}

var styles = StyleSheet.create({
    container: {
        backgroundColor:'yellow',
        flex:1,
        justifyContent:'center',
        alignItems:'center'
    },
    textContainer:{
        fontSize:20,
    }
});
//相当于将组件 Temp 公开出 去将私有的变成共有
module.exports = Computer;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容