3

当按下 BottomTabNavigator 上的特定选项卡时,我想导航到屏幕。

通常,当按下选项卡时,它会自动导航到配置的屏幕。但我不想有这种行为。我想隐藏该屏幕上的底部选项卡并在顶部栏中提供返回功能。我通常navigation.navigate('routeName')在 ReactNavigationStack 屏幕中使用。但我不知道在 BottomTabNavigator 配置中如何/在何处编写此代码。

例如,我在底部栏中有以下 5 个选项卡。我想在按下Add按钮时导航到AddNewScreen 。我不知道在哪里放置 onPress 事件。我试图把它放在and下。但仍然没有运气。optionsBottomTab.Screen

在此处输入图像描述

我试图拦截onPress事件以使用navigation.navigate. 但它甚至没有被击中,它总是用标签栏打开 AddNewScreen。

<BottomTab.Navigator initialRouteName={INITIAL_ROUTE_NAME}>
      <BottomTab.Screen
        name="Home"
        component={HomeScreen}
        initialParams="Home Params"
        options={{
          title: 'Home',
          tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-home" iconType="ion" />,
        }}
      />      
      <BottomTab.Screen
        name="AddNew"
        component={AddNewScreen}        
        options={{
          title: 'Add',
          tabBarIcon: ({ focused }) => <TabBarIcon focused={focused} name="md-add-circle" iconType="ion" 
          onPress={(e) => {
            e.preventDefault();
            console.log(e)
          }} />,    
        }}
      />
</BottomTab.Navigator>

添加新屏幕始终使用底部选项卡栏打开。

在此处输入图像描述

问题

  1. 按下选项卡时是否可以导航到特定屏幕?
  2. 无论如何要隐藏添加新屏幕上的底部标签栏吗?
4

2 回答 2

6

更新:

Navigation library v6 支持可以使用的Listener功能

<Tab.Screen
  name="Chat"
  component={Chat}
  listeners={{
    tabPress: e => {
      // Prevent default action
      e.preventDefault();

      //Any custom code here
      alert(123);
    },
  }}
/>;

您可以使用标签栏按钮在底部工具栏中拥有自定义功能。代码如下

<Tab.Screen
  name="Settings2"
  component={SettingsScreen}
  options={{
    tabBarButton: props => (
      <TouchableOpacity {...props} onPress={() => alert(123)} />
    ),
  }}
/>

这将呈现一个普通的底部标签栏按钮,但 onclick 会显示警报,您可以用您的导航或您需要的任何其他代码替换代码。'SettingsScreen' 组件也可以是返回 null 的虚拟组件。

希望这可以帮助。

于 2020-05-28T03:16:26.440 回答
6

您可以拥有自定义功能

 <Tab.Screen
      name="Add"
      component={View}
      listeners={({ navigation }) => ({
        tabPress: (e) => {
          // Prevent default action
          e.preventDefault();

          // Do something with the `navigation` object
          navigation.navigate("PhotoNavigation"); // Here!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        },
      })}
    />
<Tab.Screen name="Notifications" component={Notifications} />

于 2021-03-19T18:10:36.267 回答