React Native知識6-NavigatorIOS組件

来源:http://www.cnblogs.com/wujy/archive/2016/09/07/5849769.html
-Advertisement-
Play Games

NavigatorIOS包裝了UIKit的導航功能,可以使用左劃功能來返回到上一界面。本組件並非由Facebook官方開發組維護。這一組件的開發完全由社區主導。如果純js的方案能夠滿足你的需求的話,那麼我們建議你選擇Navigator組件(理論知識可以見React Native中文網)。 一:概念內 ...


NavigatorIOS包裝了UIKit的導航功能,可以使用左劃功能來返回到上一界面。本組件並非由Facebook官方開發組維護。這一組件的開發完全由社區主導。如果純js的方案能夠滿足你的需求的話,那麼我們建議你選擇Navigator組件(理論知識可以見React Native中文網)。

一:概念內容

1:路由:一個路由是用於描述導航器中一頁的對象。NavigatorIOS的第一個路由通過initialRoute屬性來提供。

render: function() {
  return (
    <NavigatorIOS
      initialRoute={{
        component: MyView,
        title: 'My View Title',
        passProps: { myProp: 'foo' },
      }}
    />
  );
},

現在MyView會被導航器渲染出來。它可以通過route屬性獲得對應的路由對象,導航器本身,還有所有passProps中傳遞的屬性。 查看initialRoute的propTypes來瞭解路由(route)的完整定義。

2:導航器:導航器是一個object,包含了一系列導航函數,可供視圖調用。它會作為props傳遞給NavigatorIOS渲染的任何組件。

var MyView = React.createClass({
  _handleBackButtonPress: function() {
    this.props.navigator.pop();
  },
  _handleNextButtonPress: function() {
    this.props.navigator.push(nextRoute);
  },
  ...
});

一個導航器對象包含如下的函數:

push(route) - 導航器跳轉到一個新的路由。
pop() - 回到上一頁。
popN(n) - 回到N頁之前。當N=1的時候,效果和pop()一樣。
replace(route) - 替換當前頁的路由,並立即載入新路由的視圖。
replacePrevious(route) - 替換上一頁的路由/視圖。
replacePreviousAndPop(route) - 替換上一頁的路由/視圖並且立刻切換回上一頁。
resetTo(route) - 替換最頂級的路由並且回到它。
popToRoute(route) - 一直回到某個指定的路由。
popToTop() - 回到最頂層的路由。

導航函數也可以從NavigatorIOS的子組件中獲得:

var MyView = React.createClass({
  _handleNavigationRequest: function() {
    this.refs.nav.push(otherRoute);
  },
  render: () => (
    <NavigatorIOS
      ref="nav"
      initialRoute={...}
    />
  ),
});

二:屬性

1:barTintColor string 

導航條的背景顏色。

2:initialRoute {component: function, title: string, passProps: object, backButtonIcon: Image.propTypes.source, backButtonTitle: string, leftButtonIcon: Image.propTypes.source, leftButtonTitle: string, onLeftButtonPress: function, rightButtonIcon: Image.propTypes.source, rightButtonTitle: string, onRightButtonPress: function, wrapperStyle: [object Object]} 

NavigatorIOS使用"路由"對象來包含要渲染的子視圖、它們的屬性、以及導航條配置。"push"和任何其它的導航函數的參數都是這樣的路由對象。

3:itemWrapperStyle View#style 

導航器中的組件的預設屬性。一個常見的用途是設置所有頁面的背景顏色。

4:navigationBarHidden bool 

一個布爾值,決定導航欄是否隱藏。

5:shadowHidden bool 

一個布爾值,決定是否要隱藏1像素的陰影

6:tintColor string 

導航欄上按鈕的顏色。

7:titleTextColor string 

導航器標題的文字顏色。

8:translucent bool 

一個布爾值,決定是否導航條是半透明的。

9:interactivePopGestureEnabled bool 

決定是否啟用滑動返回手勢。不指定此屬性時,手勢會根據navigationBar的顯隱情況決定是否啟用(顯示時啟用手勢,隱藏時禁用手勢)。指定此屬性後,手勢與navigationBar的顯隱情況無關。

三:方法

1:push(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; })  跳轉

2:popN(n: number)  返回第N層

3:pop()   返回上一層

4:replaceAtIndex(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; }, index: number)  替換navigation棧的路由,索引指定要替換的堆棧中的路由。如果它是負面的,它從後面計數。

5:replace(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; }) 

替換當前頁面的路由,並立即載入新路由的視圖。

6:replacePrevious(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; }) 

替換上一頁的路由/視圖。

7:popToTop()  返回到頂層

8:popToRoute(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; }) 

返回特定路由對象的項目

9:replacePreviousAndPop(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; }) 

替換前面的路由/視圖並返回到它。

10:resetTo(route: { component: Function; title: string; passProps?: Object; backButtonTitle?: string; backButtonIcon?: Object; leftButtonTitle?: string; leftButtonIcon?: Object; onLeftButtonPress?: Function; rightButtonTitle?: string; rightButtonIcon?: Object; onRightButtonPress?: Function; wrapperStyle?: any; }) 

取代頂級和並執行poptotop

三:實例代碼

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  TextInput,
  Alert,
  Image,
  TouchableHighlight,
  TouchableOpacity,
  NavigatorIOS,
  ScrollView
} from 'react-native';

//導航欄
class ReactNativeProject extends Component {
  render() {
    return (
      <NavigatorIOS style={{flex:1}} initialRoute={{ component:ListPage,title:'首頁'}}/>
    );
  }
}


//列表頁面
class ListPage extends Component {
  render(){
  return (
    <ScrollView style={styles.flex}>
      <Text style={styles.list_item} onPress={this._goToDetailPage.bind(this)}>訂單1詳情</Text>
      <Text style={styles.list_item} onPress={this._goToDetailPage.bind(this)}>訂單2詳情</Text>
      <Text style={styles.list_item} onPress={this._goToDetailPage.bind(this)}>訂單3詳情</Text>
    </ScrollView>
    );
}

_goToDetailPage(){
  this.props.navigator.push({
    component: DetailPage,
    title: '訂單詳情',
    rightButtonTitle: '購物車',
    onRightButtonPress: function(){
        alert('進入我的購物車');
      }
  });
}
}

//詳情頁
class DetailPage extends Component {
  _show(text) {
    alert(text);
  }

  _handleBackButtonPress() {
    this.props.navigator.pop();
  }

  render() {
    return (
      <View style={styles.container}>
              <TouchableOpacity
                 onPress={this._show.bind(this,'React Native')}
                 activeOpacity={0.5}>
                 <Text style={styles.item}>React Native</Text>
               </TouchableOpacity>

               <TouchableOpacity
                 onPress={this._handleBackButtonPress.bind(this)}>
                 <Text style={styles.item}>返回上一級頁面</Text>
               </TouchableOpacity>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop:64
  },
  item:
  {
    fontSize:18,
    marginLeft:5,
    color:'#434343'
  },
  flex:{
    flex: 1,
  },
  list_item:{
    lineHeight:25,
    fontSize:16,
    marginLeft:10,
    marginRight:10
  }
});

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

效果圖:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一個元素朗讀的內容可分為以下4個部分(4部分按先後順序朗讀) 1. Label:元素的標題 2. Value:元素的值(可選) 3. Traits:元素的特征,即類型,包含: 按鈕/鏈接/搜索框/鍵盤按鍵/圖片/播放音樂/選擇/總覺元素/頻繁更新/不可用空 4. Hint:提示(可選,與Traits ...
  • Android中Activity、Service、Fragment之間的相互通信比較麻煩,主要有以下一些方法: (1)使用廣播,發送者發出廣播,接收者接收廣播後進行處理; (2)使用Handler和Message,如下載線程完成下載任務後,給UI發送Message,UI收到Message後更新界面。 ...
  • 在Android開發中我們經常使用MediaPlayer來播放音頻文件,但是MediaPlayer存在一些不足,例如:資源占用量較高、延遲時間較長、不支持多個音頻同時播放等。這些缺點決定了MediaPlayer在某些場合的使用情況不會很理想,例如在對時間精準度要求相對較高的游戲開發中。 本文地址:h ...
  • MediaPlayer的狀態轉換圖也表徵了它的生命周期,如下: 這張狀態轉換圖清晰的描述了MediaPlayer的各個狀態,也列舉了主要的方法的調用時序,每種方法只能在一些特定的狀態下使用,如果使用時MediaPlayer的狀態不正確則會引發IllegalStateException異常。 Idle ...
  • 大多數android程式的右上角都會設置一個菜單按鈕比如微信的界面右上角的加號。 這個需要在layout同級目錄下新建文件夾命名為menu,再右擊新建的menu新建xml文件: xml文件代碼: 上面的兩個item代表代表的是你菜單欄上面有幾個按鈕。android:icon中可以自定義菜單項的圖片 ...
  • 今天用 cocos2dx3.11.1 + xcode7.3.1 進行開發,新建項目後遇到如下問題: 在iphone(ios9.3.5)真機運行項目(用xcode自帶虛擬機沒有出現問題) auto sprite = Sprite::create("HelloWorld.png"); 創建精靈後,spr ...
  • 本文調用android的媒體播放器實現一些音樂播放操作 項目佈局: 可以查看本地sdk中的文件查看相關api file:///……/sdk/docs/guide/topics/media/mediaplayer.html 本文地址:http://www.cnblogs.com/wuyudong/p/ ...
  • The file “FWLifeApp” couldn’t be opened because you don’t have permission to view it問題是因為項目文件中的Bundle identifier和Executable file的值不一致導致的。 解決前 解決後 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...