2
votes

Changer l'onglet actif dans TabBarNavigator lorsque l'utilisateur appuie sur un bouton dans une vue

Juste un avertissement, je suis un concepteur UX qui apprend React Native pour créer un prototype.

J'essaie de comprendre comment modifier l'onglet actif lorsqu'un utilisateur appuie sur un bouton dans une vue d'un autre onglet.

Par exemple, si vous êtes sur la vue d'accueil et qu'il y a un bouton sur lequel un utilisateur clique et qui l'amène à la vue des paramètres, je voudrais que l'onglet des paramètres s'affiche comme l'onglet inférieur actif lorsque la vue s'affiche.

Je peux actuellement demander à l'application d'accéder au nouveau afficher, mais il affichera toujours l'onglet Accueil comme l'onglet actif. De plus, il ne devrait pas y avoir de bouton «Retour» dans l'en-tête lorsque vous accédez à l'un des écrans accessibles via la navigation par onglet du bas. J'ai parcouru la documentation de React Navigation 3.x mais je n'ai rien trouvé pour résoudre ce cas d'utilisation.

Voici le code que j'utilise actuellement.

<TouchableOpacity
        onPress={() => {
          this.props.navigation.push("Settings");
        }}
      >{...} 
</TouchableOpacity>


0 commentaires

3 Réponses :


0
votes

Lorsque vous créez le navigateur de l'onglet inférieur, assurez-vous que votre écran de paramètres fait partie de cet onglet.

De plus, au lieu de push , envisagez de naviguer car c'est ce que la documentation recommande de faire maintenant à partir de la version 3 et plus récente.

Réf: https://reactnavigation.org/docs /en/tab-based-navigation.html

const TabNavigator = createBottomTabNavigator({
  Home: HomeScreen,
  Settings: SettingsScreen,
});


1 commentaires

Oui, je me suis assuré que tous mes écrans sont définis dans le code createBottomTabNavigator.



0
votes

Eh bien, vous devez d'abord décider si vous voulez des onglets en bas ou en haut de votre application Android. J'ai opté pour le bas, et je n'ai que des icônes, pas de texte (je l'ai fait parce que les icônes avec du texte sur React Navigation sur les foules Android sont horribles, mais elles ont l'air bien sur l'iPhone). Voici un exemple de code pour vous:

 import React from 'react';
import { TabNavigator } from 'react-navigation';
import { MaterialIcons, Ionicons } from '@expo/vector-icons';
import { Platform } from 'react-native';

// Import Screens
import Screen1 from '../screens/Screen1';
import Screen2 from '../screens/Screen2';

export const Tabs = TabNavigator({
  Screen1: {
    screen: Screen1,
    navigationOptions: {
      tabBarLabel: 'Screen1',
      tabBarIcon: ({ tintColor }) => <MaterialIcons name='account-circle' size={26} style={{ color: tintColor }} />
    },
  },
  Screen2: {
    screen: Screen2,
    navigationOptions: {
      tabBarLabel: 'Screen2',
      tabBarIcon: ({ tintColor }) => <Ionicons name='ios-time' size={26} style={{ color: tintColor }} />
    },
  },
}, {
    headerMode: 'none',        // I don't want a NavBar at top
    tabBarPosition: 'bottom',  // So your Android tabs go bottom
    tabBarOptions: {
      activeTintColor: 'red',  // Color of tab when pressed
      inactiveTintColor: '#b5b5b5', // Color of tab when not pressed
      showIcon: 'true', // Shows an icon for both iOS and Android
      showLabel: (Platform.OS !== 'android'), //No label for Android
      labelStyle: {
        fontSize: 11,
      },
      style: {
        backgroundColor: '#fff', // Makes Android tab bar white instead of standard blue
        height: (Platform.OS === 'ios') ? 48 : 50 // I didn't use this in my app, so the numbers may be off. 
      }
    },
});

Vous utilisez la fonction push . Ce qui pousse une autre vue dans la pile de navigation. Vous pouvez utiliser replace ici pour ne pas ajouter une autre vue dans la pile. Consultez également la navigation par onglets dans la documentation.

https://reactnavigation.org/docs/en/tab -navigator.html

https: / /reactnavigation.org/docs/en/bottom-tab-navigator.html


1 commentaires

Merci, je ne connaissais pas l'option permettant d'utiliser "remplacer", mais même en échangeant "naviguer" contre "remplacer", cela ne résout toujours pas le problème de forcer un onglet dans le navigateur d'onglets à être actif lors de la navigation depuis une action "onPress". J'utilise le createBottomTabNavigator cependant.



0
votes

Cela semble fonctionner correctement

<TouchableOpacity
    onPress={() => {
        this.props.navigation.navigate("Settings");
    }}
>{...} 
</TouchableOpacity>


0 commentaires