LoginSignup
7
2

More than 5 years have passed since last update.

react-navigationでAndroidのバックボタンやiosのスワイプバックを抑止する

Last updated at Posted at 2017-09-26

やりたいこと

  • react-navigationのStackNavigatorを使っている時にヘッダーの戻るボタン以外で戻らせたくない
    • Android端末のバックボタンや、iosのスワイプバックで戻らせないようにする
  • こんな需要あるんだろうかと思うけど試してみたので書く

サンプル

Android側

  • index.android.jsのcomponentDidMountでバックボタンを押した時の動きを制御する
index.android.js
import React, { Component } from 'react';
import { AppRegistry, BackHandler } from 'react-native';
import AppNavigator from './app/navigators/AppNavigator';

const noop = () => true;
const disabledBack = () => BackHandler.addEventListener('hardwareBackPress', noop);

class ReactNativeSample extends Component {
  componentDidMount() {
    disabledBack();
  }

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

AppRegistry.registerComponent('ReactNativeSample', () => ReactNativeSample);

ios側

  • react-navigationのオプションで制御できる
app/AppNavigator.js
import { StackNavigator } from 'react-navigation';
import SampleAScreen from '../containers/SampleAScreen';
import SampleBScreen from '../containers/SampleBScreen';
import SampleCScreen from '../containers/SampleCScreen';

const AppNavigator = StackNavigator({
  SampleA: { screen: SampleAScreen },
  SampleB: { screen: SampleBScreen },
  SampleC: { screen: SampleCScreen },
}, {
  navigationOptions: {
    gesturesEnabled: false, // ここ
  },
});

export default AppNavigator;
7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2