当前位置: 首页 > 知识库问答 >
问题:

在模式中反应本机打开的标签栏(使用expo)

单展
2023-03-14

我正在尝试让其中一个选项卡栏项目在点击时以模式打开,我当前使用的是Expo。我读过这篇文章:如何使TabNavigator按钮通过React导航按下模式屏幕。然而,我仍然在学习React Native,我不知道如何使用expo导航。目前,我已经为每个屏幕使用“CreateStackNavigator”创建了一个堆栈导航器。最后,我导出了一个底部标签导航器,包括所有堆栈:

导出默认createBottomTabNavigator({Tab1Stack,Tab2Stack,Tab3Stack,Tab4Stack);

我需要Tab4作为模式打开。有人能帮帮我吗?提前谢谢!!

共有1个答案

荆炳
2023-03-14

要在 中点击最后一个选项卡时显示模式,需要将 嵌套在 中。

所以我们可以这样设置:

一个简单的

import React from 'react';
import AppContainer from './MainNavigation';
export default class App extends React.Component {
  constructor (props) {
    super(props);
    this.state = {
    };
  }

  render () {
    return (
      <AppContainer />
    );
  }
}

这个文件包含两个导航器。一个 和一个 嵌套在 中。

为了能够显示 ,我们必须覆盖 options ode=""> 中的 函数,该函数位于TabNavigator的 中。

我们还需要检查 来查看我们正在导航的位置。如果我们要访问 ,我们可以截获调用并导航到 。否则,我们使用 并转到被点击的选项卡。

import Screen1 from './Screen1';
import Screen2 from './Screen2';
import Screen3 from './Screen3';
import ModalScreen from './ModalScreen';
import { createBottomTabNavigator, createAppContainer, createStackNavigator } from 'react-navigation';

const screens = {
  Tab1: {
    screen: Screen1
  },
  Tab2: {
    screen: Screen2
  },
  Tab3: {
    screen: Screen3
  }
};

const config = {
  headerMode: 'none',
  initialRouteName: 'Tab1',
  defaultNavigationOptions: {
    tabBarOnPress: (data) => {
      // this is where the magic happens
      const { navigation, defaultHandler } = data;
      // we check to see if the navigation key is going to be on Tab3
      if (navigation.state.key === 'Tab3') {
        // if it is we show the ModalScreen by navigating to it
        navigation.navigate('ModalScreen');
      } else {
        // otherwise we call the defaultHandler and navigate to the tab we pressed
        defaultHandler(navigation.state.key);
      }
    }
  }
};

const TabNavigator = createBottomTabNavigator(screens, config);

const stackScreens = {
  Tabs: {
    screen: TabNavigator
  },
  ModalScreen: {
    screen: ModalScreen
  }
};

//we need to set the mode to be modal
const stackConfig = {
  headerMode: 'none',
  initialRouteName: 'Tabs',
  mode: 'modal'
};

const MainNavigator = createStackNavigator(stackScreens, stackConfig);
export default createAppContainer(MainNavigator);

每个选项卡的简单屏幕

import React from 'react';
import { View, StyleSheet, Text } from 'react-native';

export default class Screen extends React.Component {
  render () {
    return (
      <View style={styles.container}>
        <Text>Tab Screen</Text>
      </View>
    );
  }
}

此屏幕是当点击第三个屏幕的选项卡时将出现的模式。因为它是上面定义 的一部分,所以它可以访问导航道具。我们设置了一个简单的按钮,当按下该按钮时调用 ,这将取消模式。

import React from 'react';
import { View, StyleSheet, Text, Button } from 'react-native';

export default class Screen extends React.Component {
  render () {
    return (
      <View style={styles.container}>
        <Text>Modal Screen</Text>
        <Button
          title={'close modal'}
          onPress={() => this.props.navigation.goBack()}
        />
      </View>
    );
  }
}

这里有一个正在工作的点心,https://snack.expo.io/@andypandy/show-modal-on-tab-press,希望它能向您展示如何设置它。

 类似资料:
  • 问题内容: 在我的Xcode项目中,当用户点击通知时,我想先将其发送到tabBar中的某个项目,然后再实例化视图控制器并将对象发送到该视图控制器。我有将它们发送到所需的tabBar的代码,但我不知道如何在将tabBar和导航栏保持与视图控制器连接的同时将它们实例化到视图控制器。关于此问题的所有答案都需要您更改根视图控制器,这使我在调用视图控制器时失去了与tabBar和导航栏的连接。 一个真实的例子

  • 我在标签打印机上打印时遇到了问题。下面的代码在一个上打印4个“标签”(附标签图片)。 下面的代码打印到兄弟QL-500标签打印机上。它打印到3.5"乘1.1"标签上。 如果有人能帮我更好地理解代码,那也太好了。 下面是它打印的内容:

  • 本文向大家介绍iOS应用开发中UITabBarController标签栏控制器使用进阶,包括了iOS应用开发中UITabBarController标签栏控制器使用进阶的使用技巧和注意事项,需要的朋友参考一下 做了这么长时间的ios开发了,最基本的UITabBarController和UINavigationController都用了好长时间了,总是改现成的代码,或者各种自定义控件的修改,用的都有些

  • 我正在尝试为没有经验的霍尼韦尔CT50设备实施React Native Android模块。该模块将监听设备上内置激光扫描仪的扫描。 我已经在React本机站点上完成了正式的演练,我已经成功地设置了一个基本模块,可以在RN组件中接收到一个简单的值。到目前为止,我的代码如下所示: 霍尼韦尔CT50包装: 霍尼韦尔CT50模块: React Native Component(在组件中) 我正在努力理解

  • 我正在Visual Studio 2012 RC中开发POS系统的C#应用程序。我必须使用标签打印机打印销售 兄弟P-Touch QL-500标签打印机。 我已经做了什么。 > 我安装了最新的b-pac SDK 3.0 成功添加对我的C#应用程序的引用。 为了创建标签模板,我安装了最新版本的p-touch Editor 5.0。 制作了一个模板(Mylabel.lbl)。 但在此之前。 我运行了一

  • 我想在键盘打开时隐藏屏幕上的标签栏。我已经尝试过更改AndroidManifest.XML文件。通过将更改为,当键盘打开时,屏幕标签栏会隐藏,但问题是我现在的文本输入与键盘重叠,我也尝试过KeyBoardAvidingView,但它不起作用,因为当更改XML文件时,它也会影响其他应用程序组件。所以告诉我如何在键盘打开时隐藏标签栏而不更改XML文件。

  • 很好的一天。请您通过打开Chrome浏览器创建一个新选项卡,在其中执行一些操作,关闭新选项卡,然后返回第一个选项卡并继续在其中工作,来判断Selenium VBA是否可行? 我用以下代码打开浏览器:

  • 这是我写的代码,以打开一个新标签在已经打开Chrome但它是重定向到第二个url在现有的标签只有。 我想打开一个新选项卡并加载“www.mailinator.com”的url 有人能帮我吗?