react-native-router-flux tabs 如何更改所选选项卡的图标?
react-native-router-flux tabs how to change icon of the selected tab?
我正在使用来自 react-native-router-flux ^4.0.0-beta.21 和 react-native-vector-icons 的导航选项卡。如何在选中场景时更改图标或更改所选场景的图标颜色?
<Scene
key='navigationTab'
tabs
tabBarStyle={styles.tabBarStyle}
showLabel={false}
>
<Scene
key='home'
hideNavBar
icon={SimpleLineIcon}
name='home'
size={25}
component={PostList}
initial
/>
<Scene
key='profile'
hideNavBar
icon={FontAwesomeIcon}
name='user-o'
size={25}
component={Register}
/>
</Scene>
现在我已经定义了一个如下所示的图标,但是我该如何传递像焦点道具这样的东西呢?
const iconBack = () => (
<TouchableHightLight onPress={console.log('home')} >
<MaterialIcon
name='keyboard-arrow-left'
size={28}
/>
</TouchableHightLight>
);
我正在使用常量来调用我的 tabIcons
import Icon from 'react-native-vector-icons/FontAwesome'
const iconProfile = () => (
<Icon color='#f53d3d' name='user-o' size={25} />
)
...
<Scene
key='profile'
hideNavBar
icon={iconProfile}
name='profile'
component={Register}
/>
您可以接收focused
作为图标渲染函数的参数,然后检查当前图标是否聚焦。
例如:
const SimpleLineIcon= ({ title, focused }) => {
let image;
switch (title) {
case 'firstTab':
image = focused ? require('firstTabSelected.gif') : require('firstTab.gif');
break;
case 'secondTab':
image = focused ? require('secondTabSelected.gif') : require('secondTab.gif');
break;
}
return ( <Image source={image} /> );
}
const SimpleLineIcon= ({ focused, title }) => {
let image;
switch (title) {
case 'firstTab':
image = require('firstTabSelected.gif') : require('firstTab.gif');
break;
case 'secondTab':
image = require('secondTabSelected.gif') : require('secondTab.gif');
break;
}
return ( <Image source={image} /> );
}
您可以定义状态,然后相应地更改状态:
下面的代码将帮助您解释场景。
import Icon from 'react-native-vector-icons/FontAwesome'
(可以换成自己的图标)
注意:在你的代码中添加class它是一个成员函数。
constructor(){
super()
this.state={
focused:false,
}
}
iconProfile = () => {
if(this.state.focused==false)
return(
<TouchableOpacity onPress={()=>{
this.setState({focused:true})
}}>
<Icon color='#f53d3d' name='user-o' size={25} />
</TouchableOpacity>
)
else{
return(
<TouchableOpacity>
<Icon color='green' name='user-o' size={25} />
</TouchableOpacity>
)
}
}
以及场景:
<Scene key='tabbar' tabs={true} initial showLabel={false} hideNavBar tabBarStyle={{paddingTop:15}}>
<Scene
key="practice"
component={practice}
title="practice"
hideNavBar
icon={this.iconProfile}
/>
提示:你也可以使用 touchableWithoutFeedback form react native(为了不显示来自按钮的反馈)
我正在使用来自 react-native-router-flux ^4.0.0-beta.21 和 react-native-vector-icons 的导航选项卡。如何在选中场景时更改图标或更改所选场景的图标颜色?
<Scene
key='navigationTab'
tabs
tabBarStyle={styles.tabBarStyle}
showLabel={false}
>
<Scene
key='home'
hideNavBar
icon={SimpleLineIcon}
name='home'
size={25}
component={PostList}
initial
/>
<Scene
key='profile'
hideNavBar
icon={FontAwesomeIcon}
name='user-o'
size={25}
component={Register}
/>
</Scene>
现在我已经定义了一个如下所示的图标,但是我该如何传递像焦点道具这样的东西呢?
const iconBack = () => (
<TouchableHightLight onPress={console.log('home')} >
<MaterialIcon
name='keyboard-arrow-left'
size={28}
/>
</TouchableHightLight>
);
我正在使用常量来调用我的 tabIcons
import Icon from 'react-native-vector-icons/FontAwesome'
const iconProfile = () => (
<Icon color='#f53d3d' name='user-o' size={25} />
)
...
<Scene
key='profile'
hideNavBar
icon={iconProfile}
name='profile'
component={Register}
/>
您可以接收focused
作为图标渲染函数的参数,然后检查当前图标是否聚焦。
例如:
const SimpleLineIcon= ({ title, focused }) => {
let image;
switch (title) {
case 'firstTab':
image = focused ? require('firstTabSelected.gif') : require('firstTab.gif');
break;
case 'secondTab':
image = focused ? require('secondTabSelected.gif') : require('secondTab.gif');
break;
}
return ( <Image source={image} /> );
}
const SimpleLineIcon= ({ focused, title }) => {
let image;
switch (title) {
case 'firstTab':
image = require('firstTabSelected.gif') : require('firstTab.gif');
break;
case 'secondTab':
image = require('secondTabSelected.gif') : require('secondTab.gif');
break;
}
return ( <Image source={image} /> );
}
您可以定义状态,然后相应地更改状态: 下面的代码将帮助您解释场景。
import Icon from 'react-native-vector-icons/FontAwesome'
(可以换成自己的图标)
注意:在你的代码中添加class它是一个成员函数。
constructor(){
super()
this.state={
focused:false,
}
}
iconProfile = () => {
if(this.state.focused==false)
return(
<TouchableOpacity onPress={()=>{
this.setState({focused:true})
}}>
<Icon color='#f53d3d' name='user-o' size={25} />
</TouchableOpacity>
)
else{
return(
<TouchableOpacity>
<Icon color='green' name='user-o' size={25} />
</TouchableOpacity>
)
}
}
以及场景:
<Scene key='tabbar' tabs={true} initial showLabel={false} hideNavBar tabBarStyle={{paddingTop:15}}>
<Scene
key="practice"
component={practice}
title="practice"
hideNavBar
icon={this.iconProfile}
/>
提示:你也可以使用 touchableWithoutFeedback form react native(为了不显示来自按钮的反馈)