iOS 導(dǎo)航器包裝了 UIKit 導(dǎo)航,并且允許你添加跨應(yīng)用程序的 back-swipe 功能。
路線是用于描述導(dǎo)航器每個(gè)頁面的一個(gè)對象。第一個(gè)提供給 NavigatorIOS 的路線是 initialRoute
:
render: function() { return ( <NavigatorIOS initialRoute={{ component: MyView, title: 'My View Title', passProps: { myProp: 'foo' }, }} /> ); },
現(xiàn)在將由導(dǎo)航器呈現(xiàn) MyView。它將在 route
道具,導(dǎo)航器及所有的 passProps
指定的道具中接受一個(gè)路線對象。
路線完整的定義請看 initialRoute propType。
Navigator
是視圖能夠調(diào)用的導(dǎo)航函數(shù)的一個(gè)對象。它作為一個(gè)道具會被傳遞給任何由 NavigatorIOS 呈現(xiàn)的組件。
var MyView = React.createClass({ _handleBackButtonPress: function() { this.props.navigator.pop(); }, _handleNextButtonPress: function() { this.props.navigator.push(nextRoute); }, ... });
一個(gè)導(dǎo)航對象包含以下功能:
push(route)
——導(dǎo)航到一個(gè)新的路線
pop()
——返回一個(gè)頁面
popN(n)
——一次返回 N 頁。當(dāng) N=1 時(shí),該行為相當(dāng)于 pop()
replace(route)
——取代當(dāng)前頁面的路線,并立即為新路線加載視圖
replacePrevious(route)
——取代前一頁的路線/視圖
replacePreviousAndPop(route)
——取代了以前的路線/視圖并轉(zhuǎn)換回去
resetTo(route)
——取代頂級的項(xiàng)目并 popToTop
popToRoute(route)
——為特定的路線對象回到項(xiàng)目
popToTop()
——回到頂級項(xiàng)目
導(dǎo)航功能在 NavigatorIOS 組件中也是可用的:
var MyView = React.createClass({ _handleNavigationRequest: function() { this.refs.nav.push(otherRoute); }, render: () => ( <NavigatorIOS ref="nav" initialRoute={...} /> ), });
initialRoute {組件:函數(shù)型,標(biāo)題:字符串型,passProps:對象型,backButtonTitle:字符串型,rightButtonTitle:字符串型,onRightButtonPress:函數(shù)型,wrapperStyle:[對象型Object]}
NavigatorIOS 使用“路線”對象來識別子視圖,道具,及導(dǎo)航欄的配置?!皃ush”和所有其他的導(dǎo)航操作預(yù)計(jì)路線是這樣的:
itemWrapperStyle View#style
默認(rèn)的包為 navigator 中的組件設(shè)置樣式。一個(gè)常見的用例是為每一頁設(shè)置 backgroundColor
tintColor 字符串型
在導(dǎo)航欄中的按鈕使用的顏色
'use strict';var React = require('react-native');var ViewExample = require('./ViewExample');var createExamplePage = require('./createExamplePage');var { PixelRatio, ScrollView, StyleSheet, Text, TouchableHighlight, View, } = React;var EmptyPage = React.createClass({ render: function() { return ( <View style={styles.emptyPage}> <Text style={styles.emptyPageText}> {this.props.text} </Text> </View> ); }, });var NavigatorIOSExample = React.createClass({ statics: { title: '<NavigatorIOS>', description: 'iOS navigation capabilities', }, render: function() { var recurseTitle = 'Recurse Navigation'; if (!this.props.topExampleRoute) { recurseTitle += ' - more examples here'; } return ( <ScrollView style={styles.list}> <View style={styles.line}/> <View style={styles.group}> <View style={styles.row}> <Text style={styles.rowNote}> See <UIExplorerApp> for top-level usage. </Text> </View> </View> <View style={styles.line}/> <View style={styles.groupSpace}/> <View style={styles.line}/> <View style={styles.group}> {this._renderRow(recurseTitle, () => { this.props.navigator.push({ title: NavigatorIOSExample.title, component: NavigatorIOSExample, backButtonTitle: 'Custom Back', passProps: {topExampleRoute: this.props.topExampleRoute || this.props.route}, }); })} {this._renderRow('Push View Example', () => { this.props.navigator.push({ title: 'Very Long Custom View Example Title', component: createExamplePage(null, ViewExample), }); })} {this._renderRow('Custom Right Button', () => { this.props.navigator.push({ title: NavigatorIOSExample.title, component: EmptyPage, rightButtonTitle: 'Cancel', onRightButtonPress: () => this.props.navigator.pop(), passProps: { text: 'This page has a right button in the nav bar', } }); })} {this._renderRow('Pop', () => { this.props.navigator.pop(); })} {this._renderRow('Pop to top', () => { this.props.navigator.popToTop(); })} {this._renderRow('Replace here', () => { var prevRoute = this.props.route; this.props.navigator.replace({ title: 'New Navigation', component: EmptyPage, rightButtonTitle: 'Undo', onRightButtonPress: () => this.props.navigator.replace(prevRoute), passProps: { text: 'The component is replaced, but there is currently no ' + 'way to change the right button or title of the current route', } }); })} {this._renderReplacePrevious()} {this._renderReplacePreviousAndPop()} {this._renderPopToTopNavExample()} </View> <View style={styles.line}/> </ScrollView> ); }, _renderPopToTopNavExample: function() { if (!this.props.topExampleRoute) { return null; } return this._renderRow('Pop to top NavigatorIOSExample', () => { this.props.navigator.popToRoute(this.props.topExampleRoute); }); }, _renderReplacePrevious: function() { if (!this.props.topExampleRoute) { // this is to avoid replacing the UIExplorerList at the top of the stack return null; } return this._renderRow('Replace previous', () => { this.props.navigator.replacePrevious({ title: 'Replaced', component: EmptyPage, passProps: { text: 'This is a replaced "previous" page', }, wrapperStyle: styles.customWrapperStyle, }); }); }, _renderReplacePreviousAndPop: function() { if (!this.props.topExampleRoute) { // this is to avoid replacing the UIExplorerList at the top of the stack return null; } return this._renderRow('Replace previous and pop', () => { this.props.navigator.replacePreviousAndPop({ title: 'Replaced and Popped', component: EmptyPage, passProps: { text: 'This is a replaced "previous" page', }, wrapperStyle: styles.customWrapperStyle, }); }); }, _renderRow: function(title: string, onPress: Function) { return ( <View> <TouchableHighlight onPress={onPress}> <View style={styles.row}> <Text style={styles.rowText}> {title} </Text> </View> </TouchableHighlight> <View style={styles.separator} /> </View> ); }, });var styles = StyleSheet.create({ customWrapperStyle: { backgroundColor: '#bbdddd', }, emptyPage: { flex: 1, paddingTop: 64, }, emptyPageText: { margin: 10, }, list: { backgroundColor: '#eeeeee', marginTop: 10, }, group: { backgroundColor: 'white', }, groupSpace: { height: 15, }, line: { backgroundColor: '#bbbbbb', height: 1 / PixelRatio.get(), }, row: { backgroundColor: 'white', justifyContent: 'center', paddingHorizontal: 15, paddingVertical: 15, }, separator: { height: 1 / PixelRatio.get(), backgroundColor: '#bbbbbb', marginLeft: 15, }, rowNote: { fontSize: 17, }, rowText: { fontSize: 17, fontWeight: '500', }, });module.exports = NavigatorIOSExample;
更多建議: