mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-02-11 22:33:32 +08:00
Add headerBackImage, closes #1999
This commit is contained in:
@@ -28,6 +28,15 @@ class MyNavScreen extends React.Component<MyNavScreenProps> {
|
||||
onPress={() => navigation.navigate('Photos', { name: 'Jane' })}
|
||||
title="Go to a photos screen"
|
||||
/>
|
||||
<Button
|
||||
onPress={() =>
|
||||
navigation.navigate('Profile', {
|
||||
name: 'Dog',
|
||||
headerBackImage: require('./assets/dog-back.png'),
|
||||
})
|
||||
}
|
||||
title="Custom back button"
|
||||
/>
|
||||
<Button onPress={() => navigation.goBack(null)} title="Go back" />
|
||||
<StatusBar barStyle="default" />
|
||||
</SafeAreaView>
|
||||
@@ -129,9 +138,9 @@ class MyPhotosScreen extends React.Component<MyPhotosScreenProps> {
|
||||
|
||||
const MyProfileScreen = ({ navigation }) => (
|
||||
<MyNavScreen
|
||||
banner={`${navigation.state.params.mode === 'edit'
|
||||
? 'Now Editing '
|
||||
: ''}${navigation.state.params.name}'s Profile`}
|
||||
banner={`${navigation.state.params.mode === 'edit' ? 'Now Editing ' : ''}${
|
||||
navigation.state.params.name
|
||||
}'s Profile`}
|
||||
navigation={navigation}
|
||||
/>
|
||||
);
|
||||
@@ -141,6 +150,7 @@ MyProfileScreen.navigationOptions = props => {
|
||||
const { state, setParams } = navigation;
|
||||
const { params } = state;
|
||||
return {
|
||||
headerBackImage: params.headerBackImage,
|
||||
headerTitle: `${params.name}'s Profile!`,
|
||||
// Render a button on the right side of the header.
|
||||
// When pressed switches the screen to edit mode.
|
||||
@@ -148,7 +158,8 @@ MyProfileScreen.navigationOptions = props => {
|
||||
<Button
|
||||
title={params.mode === 'edit' ? 'Done' : 'Edit'}
|
||||
onPress={() =>
|
||||
setParams({ mode: params.mode === 'edit' ? '' : 'edit' })}
|
||||
setParams({ mode: params.mode === 'edit' ? '' : 'edit' })
|
||||
}
|
||||
/>
|
||||
),
|
||||
};
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
@@ -4,7 +4,7 @@ import * as React from 'react';
|
||||
|
||||
import type { StyleObj } from 'react-native/Libraries/StyleSheet/StyleSheetTypes';
|
||||
|
||||
import { Animated } from 'react-native';
|
||||
import { Animated, Image } from 'react-native';
|
||||
|
||||
export type ViewStyleProp = StyleObj;
|
||||
export type TextStyleProp = StyleObj;
|
||||
@@ -315,6 +315,7 @@ export type NavigationStackScreenOptions = NavigationScreenOptions & {
|
||||
headerTintColor?: string,
|
||||
headerLeft?: React.Node | React.ComponentType<any>,
|
||||
headerBackTitle?: string,
|
||||
headerBackImage?: Image.propTypes.source,
|
||||
headerTruncatedBackTitle?: string,
|
||||
headerBackTitleStyle?: TextStyleProp,
|
||||
headerPressColorAndroid?: string,
|
||||
|
||||
@@ -141,6 +141,7 @@ class Header extends React.PureComponent {
|
||||
onPress={this._navigateBack}
|
||||
pressColorAndroid={options.headerPressColorAndroid}
|
||||
tintColor={options.headerTintColor}
|
||||
buttonImage={options.headerBackImage}
|
||||
title={backButtonTitle}
|
||||
truncatedTitle={truncatedBackButtonTitle}
|
||||
titleStyle={options.headerBackTitleStyle}
|
||||
|
||||
@@ -17,6 +17,8 @@ class HeaderBackButton extends React.PureComponent {
|
||||
ios: '#037aff',
|
||||
}),
|
||||
truncatedTitle: 'Back',
|
||||
// eslint-disable-next-line global-require
|
||||
buttonImage: require('../assets/back-icon.png'),
|
||||
};
|
||||
|
||||
state = {};
|
||||
@@ -32,6 +34,7 @@ class HeaderBackButton extends React.PureComponent {
|
||||
|
||||
render() {
|
||||
const {
|
||||
buttonImage,
|
||||
onPress,
|
||||
pressColorAndroid,
|
||||
width,
|
||||
@@ -48,9 +51,6 @@ class HeaderBackButton extends React.PureComponent {
|
||||
|
||||
const backButtonTitle = renderTruncated ? truncatedTitle : title;
|
||||
|
||||
// eslint-disable-next-line global-require
|
||||
const asset = require('../assets/back-icon.png');
|
||||
|
||||
return (
|
||||
<TouchableItem
|
||||
accessibilityComponentType="button"
|
||||
@@ -70,7 +70,7 @@ class HeaderBackButton extends React.PureComponent {
|
||||
!!title && styles.iconWithTitle,
|
||||
!!tintColor && { tintColor },
|
||||
]}
|
||||
source={asset}
|
||||
source={buttonImage}
|
||||
/>
|
||||
{Platform.OS === 'ios' &&
|
||||
typeof backButtonTitle === 'string' && (
|
||||
|
||||
Reference in New Issue
Block a user