React Native商城项目实战08 - 设置“More”界面cell

知识点
关于cell上的Switch开关

  1. 自定义可复用的cell
    More/CommonCell.js:
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

// ES5
var CommonCell = React.createClass({
    getDefaultProps(){
        return{
            title:'', // cell标题文字
            isSwitch:false, // 是否展示开关
            rightTitle:'', //cell右侧标题
        }
    },

    getInitialState(){
        return{
            isOn:false,
        }
    },

    render() {
        return (
            <TouchableOpacity onPress={()=>{alert('点击了')}}>
                <View style={styles.container}>
                    <Text>{this.props.title}</Text>
                    {this.renderRightView()}
                </View>
            </TouchableOpacity>
        );
    },

    // cell右侧指示图标视图
    renderRightView(){
        if(this.props.isSwitch){
           return(
               <Switch value={this.state.isOn == true} onValueChange={()=>{this.setState({isOn:!this.state.isOn})}} />
           )
        }else{
            return(
                <View style={{flexDirection:'row',alignItems:'center'}}>
                    {this.renderRightTitle()}
                    <Image source={{uri:'icon_cell_rightArrow'}} style={{width:8,height:13}} />
                </View>
            )
        }
    },

    // cell右侧标题视图
    renderRightTitle(){
        if(this.props.rightTitle.length > 0){
            return(
                <Text style={{color:'gray',marginRight:10}}>{this.props.rightTitle}</Text>
            )
        }
    },
});

const styles = StyleSheet.create({
    container: {
        backgroundColor: 'white',
        height:Platform.OS == 'ios' ? 40 : 30,
        borderBottomColor:'#ddd',
        borderBottomWidth:0.5,
        flexDirection:'row',
        justifyContent:'space-between',
        // 垂直居中
        alignItems:'center',
        paddingLeft:10,
        paddingRight:10,
    },
});

// 输出
module.exports = CommonCell;

2.在More.js里使用cell:

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

/*======导入外部组件类======*/
var CommonCell = require('./CommonCell');

// ES5
var More = React.createClass({
    render() {
        return (
            <View style={styles.container}>
                {/*导航条*/}
                {this.renderNavBar()}
                <ScrollView>
                    <View style={{marginTop:20}}>
                        <CommonCell
                            title="扫一扫"
                        />
                    </View>
                    <View style={{marginTop:20}}>
                        <CommonCell
                            title="省流量模式"
                            isSwitch={true}
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                        <CommonCell
                            title="清空缓存"
                            rightTitle="1.99M"
                        />
                    </View>
                    <View style={{marginTop:20}}>
                        <CommonCell
                            title="省流量模式"
                            isSwitch={true}
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                        <CommonCell
                            title="扫一扫"
                        />
                    </View>
                </ScrollView>
            </View>
        );
    },

    // 导航条
    renderNavBar(){
        return(
            <View style={styles.navOutViewStyle}>
                <Text style={{color:'white',fontSize:16,fontWeight:'bold'}}>更多</Text>
                    <TouchableOpacity onPress={()=>{alert('点击了')}} style={styles.rightViewStyle}>
                        <Image source={{uri:'icon_mine_setting'}} style={styles.navImgStyle} />
                    </TouchableOpacity>
            </View>
        )
    }
});

const styles = StyleSheet.create({
    // 导航条视图
    navOutViewStyle:{
        height:Platform.OS === 'ios' ? 64 : 44,
        backgroundColor:'rgba(255,96,0,1)',
        // 主轴方向
        flexDirection:'row',
        // 侧轴对齐方式 垂直居中
        alignItems:'center',
        // 主轴方向居中
        justifyContent:'center',
    },
    // 导航栏右侧
    rightViewStyle:{
        // 绝对定位
        position:'absolute',
        right:10,
        bottom:15,
    },
    // 导航条上图片
    navImgStyle:{
        width:Platform.OS === 'ios' ? 28 : 24,
        height:Platform.OS === 'ios' ? 28 : 24,
    },
    container: {
        flex: 1,
        backgroundColor: '#e8e8e8',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },

});

// 输出
module.exports = More;

3.最后效果
这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值