[Mac][React Native][iOS] TabBar與Navigator範例

  • 502
  • 0
  • 2016-02-24

摘要

本篇記錄了常用的TabBar與Navigator實際套用於iOS的範例。並提供範例下載。

環境建立好了,也可以順利的執行第一個範本了,那我們就進入實戰吧!

若對基本的語法不是很清楚,可以到第一個範本複習

在這邊,我們將透過TabBar與Navigator為練習的對象執行在iOS的模擬器上。

完工圖

完成時,將會長這樣子


程式結構與坎套結構

參考黑色的程式結構,再對應不同的顏色說明

綠色Tab1Content.js

黃色Tab1.js

紅色index.ios.js

由這張圖可以看出,每一個區塊,都是被獨立定義成一個 js,透過組裝的方式將畫面Build起來。


程式碼實做

Tab1Content.js程式內容,仔細細看程式碼,在React Native基本結構都相同,若不清楚,可以參考這裡,將不再贅述。當我們要開始進行畫面功能的設計時,就是要把功能放在這邊。

'use strict';
var React = require('react-native');
var {
    StyleSheet,
    View,
    Component
   } = React;

var styles = StyleSheet.create({
});

//我們在這邊定義Tab1Content這個Class,裡面不放啥東西,有需要的下載之後自行擴展運用
class Tab1Content extends Component {
    render() {
        return (
            <View>
              //功能放在這邊
	        </View>
        );
    }
}
module.exports = Tab1Content;

 

Tab1.js是整個Tab1的最外框,Tab1Content.js是要排放功能內容的殼。

'use strict';

var React = require('react-native');
var Tab1Content= require('./Tab1Content');

//因為要載入Tab1NavBar,所以定義了NavigatorIOS
var {
  StyleSheet,
  View,
  Text,
  NavigatorIOS,
  Component
} = React;

//設定樣式
var styles = StyleSheet.create({
  description:{
    fontSize:20,
    backgroundColor:'white'
  },
  //我們給Tab1Content一個樣式,佔滿整個自己
  container:{
    flex:1
  }
});

//在渲染的時候,將定義的NavigatorIOS放上去,並跟他說該物件是Tab1Content,已在上方載入
class Tab1 extends Component{
  render(){
    return (
       <NavigatorIOS
           style={styles.navcontainer}
           initialRoute={{
       title: 'Tab 1',
       component: Tab1Content
       }}/>
    );
  }
}

module.exports = Tab1;

 

index.ios.js整大框框,裡面包含了Tab1Tab2


'use strict'

var React = require('react-native');

//將Tab1.js載入進來,在這邊要用到『./』表示當前資料夾
var Tab1 = require('./Tab1');
var Tab2 = require('./Tab2');

//注意~這邊有載入TabBarIOS
var {
  AppRegistry,
  TabBarIOS,
  Component
}  =React;

class HelloRyan extends Component{
  constructor(props){
    super(props);
    //定義了state,裡面則載入Tab1
    this.state = {
      selectedTab:'Tab1'
    };
  }

//render時我們定義了兩個TabBarIOS
  render(){
    return(
      //將定義的state指定給TabBarIOS
      <TabBarIOS selectedTab={this.state.selectedTab}>
      
      //定義每個Item的內容,給他一個icon,定義了這個Item被Press的時候,
      //要把selectedTab設定為Tab1
      <TabBarIOS.Item
        selected={this.state.selectedTab ==='Tab1'}
        systemIcon='featured'
        onPress={()=>{
            this.setState({
              selectedTab:'Tab1'
            });
        }}>
        <Tab1/>
      </TabBarIOS.Item>
      <TabBarIOS.Item
        selected={this.state.selectedTab ==='Tab2'}
        systemIcon='search'
        onPress={()=>{
            this.setState({
              selectedTab:'Tab2'
            });
        }}>
        <Tab2/>
      </TabBarIOS.Item>
      </TabBarIOS>
    );
  }
}
AppRegistry.registerComponent('HelloRyan',()=>HelloRyan);

至於Tab2.js與Tab2Content.js程式碼都相似,就不重複貼了。

以上是Ryan撰寫後的筆記,一起學習吧!

程式碼下載請點我

以上文章由Ryan整理,若有侵犯版權、勘誤,請來信告知