React Native之TabBarIOS组件
---恢复内容开始---
一、简介
顾名思义tab切换的效果,很常见的组件功能,在微信微博底部导航功能。
二、TabBarIOS与TabBarIOS.Item
见字知意,显然TabBarIOS是包含有TabBarIOS.Item子组件的。官网代码示之:
render: function() { return ( <TabBarIOS unselectedTintColor="yellow" tintColor="white" barTintColor="darkslateblue"> <TabBarIOS.Item title="Blue Tab" icon={{uri: base64Icon, scale: 3}} selected={this.state.selectedTab === 'blueTab'} onPress={() => { this.setState({ selectedTab: 'blueTab', }); }}> {this._renderContent('#414A8C', 'Blue Tab')} </TabBarIOS.Item> <TabBarIOS.Item systemIcon="history" badge={this.state.notifCount > 0 ? this.state.notifCount : undefined} selected={this.state.selectedTab === 'redTab'} onPress={() => { this.setState({ selectedTab: 'redTab', notifCount: this.state.notifCount + 1, }); }}> {this._renderContent('#783E33', 'Red Tab', this.state.notifCount)} </TabBarIOS.Item> <TabBarIOS.Item icon={require('./flux.png')} selectedIcon={require('./relay.png')} renderAsOriginal title="More" selected={this.state.selectedTab === 'greenTab'} onPress={() => { this.setState({ selectedTab: 'greenTab', presses: this.state.presses + 1 }); }}> {this._renderContent('#21551C', 'Green Tab', this.state.presses)} </TabBarIOS.Item> </TabBarIOS> );
三、TabBarIOS的API
我们要对组件进行修改先要看有哪些可能用到的API。
- barTintColor String 标签栏的背景颜色
-
style {} 可以自定义一些样式
-
tintColor String 当前被选中标签的颜色
-
unselectedItemTintColor String 没有被选中的标签的颜色 IOS10以上才有效
-
translucent Boolean 标签栏是否需要半透明化
三、TabBarIOS.Item的API
我们从上面的api可以得知TabBarIOS的属性设置是对标签栏整体的控制。我们如果想单独为标签设置则需要在Item里设置。
-
badge String|Number 标签右上角的气泡(形如微信里未读消息样式)
-
icon Image.propTypes.source 给当前标签指定一个自定义的图标。如果定义了
systemIcon属性, 这个属性会被忽略。 -
onPress Function 触屏点击是触发的事件,此时一般修改组件的状态来使得
selected={true}。 -
selected Boolean 属性决定子试图是否可见(空白页面很可能是没有任何标签被选中或者没有引入子组件)
-
selectedIcon Image.propTypes.source 被选中时显示的自定义图标
-
style {} 自定义的属性
-
title string 在图标下面显示的标题文字。如果定义了
systemIcon属性,这个属性会被忽略。 -
systemIcon enum 预定义的系统图标(如果你使用了此属性,title和selectedIcon都会被覆盖为系统定义的值。)
四、结合上面的API自己动手写个
import React, {Component} from 'react';
import {
AppRegistry,
View,
StyleSheet,
AlertIOS,
Text,
TabBarIOS,
NavigatorIOS,
ScrollView,
TextInput,
ListView,
Image
} from 'react-native';
const Icon = require('react-native-vector-icons/Ionicons')
import List from './src/List/index';
import Publish from './src/Publish/index';
import Setting from './src/Setting/index';
export default class AwesomeProject extends Component {
constructor(props) {
super(props);
this.state = {
selectedTab: 'Creation'
}
}
render() {
return (
<TabBarIOS
barTintColor="#222222"
tintColor="#ffcd32"
style={styles.container}
>
<Icon.TabBarItem
title="主页"
iconName="ios-home-outline"
selectedIconName="ios-home"
selected = {this.state.selectedTab === 'CreateList'}
onPress={() => {
this.setState({
selectedTab: 'CreateList'
})
}}
>
<List/>
</Icon.TabBarItem>
<Icon.TabBarItem
title="发布"
iconName="ios-add-circle-outline"
selectedIconName="ios-add-circle"
selected = {this.state.selectedTab === 'Creation'}
onPress={() => {
this.setState({
selectedTab: 'Creation'
});
}}
>
<Publish />
</Icon.TabBarItem>
<Icon.TabBarItem
title="个人中心"
iconName="ios-person-outline"
selectedIconName="ios-person"
badge="2"
selected = {this.state.selectedTab === 'Setting'}
onPress={() => {
this.setState({
selectedTab: 'Setting'
})
}}
>
<Setting/>
</Icon.TabBarItem>
</TabBarIOS>
)
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: '#222222'
}
});
AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);

浙公网安备 33010602011771号