ReactNativeにてUITableViewの編集機能を実装したいです。
UITableViewの編集機能
こちらはヘッダーの右上ボタンを押すと、テーブルの各行が
右にずれて削除or順番の入れ替えができるようになります。
ReactNativeを使ってこの機能を実装したいのですが、
右にずれる際にボタンを表示したり、順番を入れ替えたりする方法がわかりません。
ヘッダーにボタンを表示したり、テーブルビューっぽいものを出すことはできたのですが、ほかの処理が検討もつきません。
お分かりになる方おりましたら、アドバイス頂くことは難しいでしょうか。
ReactNative
1import React from 'react'; 2import { StyleSheet, Text, View, ScrollView, SafeAreaView, FlatList } from 'react-native'; 3import { Button, ButtonGroup, List, ListItem } from 'react-native-elements'; 4import { connect } from 'react-redux'; 5 6import * as actions from '../actions'; 7 8const TABLE_DATA = [ 9 10 { 11 title: 'イベント名AAA', 12 total: 20000, 13 number: 6, 14 items:[ 15 1,2,3 16 ], 17 }, 18 19 { 20 title: 'イベント名BBB', 21 total: 20000, 22 number: 6, 23 items:[ 24 1,2,3 25 ], 26 }, 27 { 28 title: 'イベント名CCC', 29 total: 20000, 30 number: 6, 31 items:[ 32 1,2,3 33 ], 34 }, 35 { 36 title: 'イベント名DDD', 37 total: 20000, 38 number: 6, 39 items:[ 40 1,2,3 41 ], 42 }, 43]; 44 45function Item({ title }) { 46 return ( 47 <View style={styles.item}> 48 <Text style={styles.title}>{title}</Text> 49 </View> 50 ); 51} 52 53class HomeScreen extends React.Component { 54 55 constructor(props) { 56 super(props); 57 58 this.state = { 59 selectedIndex: ALL_INDEX, 60 }; 61 } 62 63 static navigationOptions = ({ navigation }) => { 64 const { state } = navigation 65 return { 66 headerRight: <Button 67 style={styles.headerButton} 68 type="clear" 69 title="編集" 70 color="white" 71 onPress={() => state.params.handleSave()} 72 />, 73 } 74 } 75 76 saveDetails() { 77 alert('saved') 78 } 79 80 onListItemPress = (selectedReview) => { 81 this.props.selectDetailReview(selectedReview); // ←追記部分 82 this.props.navigation.navigate('edit', selectedReview); 83 } 84 85 renderRow ({ item }) { 86 return ( 87 <ListItem 88 roundAvatar 89 title={item.name} 90 subtitle={item.subtitle} 91 avatar={{uri:item.avatar_url}} 92 /> 93 ); 94 } 95 96 97 // 画面描画 98 render() { 99 100 return ( 101 <SafeAreaView style={styles.safearea}> 102 <ScrollView> 103 <FlatList 104 style={styles.flatlist} 105 data={TABLE_DATA} 106 keyExtractor={(item) => item.id} 107 renderItem={({ item }) => ( 108 <ListItem 109 style={styles.item} 110 title={item.title} 111 onPress={() => this.onListItemPress(item)} 112 bottomDivider 113 /> 114 )} 115 /> 116 117 </ScrollView> 118 </SafeAreaView> 119 ); 120 } 121} 122 123const mapStateToProps = (state) => { // `state`を引数として受け取るアロー関数 124 return { 125 // `state.review.allReviews`を → `this.props.allReviews`にコピー 126 allReviews: state.review.allReviews 127 }; 128}; 129 130const styles = StyleSheet.create({ 131 132 headerButton: { 133 color: "#000", 134 //backgroundColor: 'rgba(255, 255, 255, 0.0)', 135 }, 136 137 safearea: { 138 flex: 1, 139 backgroundColor: "#eee" 140 }, 141 142 text: { 143 alignSelf: 'center', 144 margin: 20 145 }, 146 147 flatlist: { 148 149 }, 150 151 item: { 152 //backgroundColor: '#ffffff', 153 //padding: 10, 154 //marginVertical: 2, 155 //marginHorizontal: 2, 156 //borderWidth: 0.5, 157 //borderBottomWidth: 0.5, 158 //borderColor: '#000000', 159 }, 160 title: { 161 fontSize: 32, 162 }, 163}); 164 165//export default HomeScreen; 166export default connect(mapStateToProps, actions)(HomeScreen); 167
2019年12月11日 追記
ご回答ありがとうございます。
下記の手順で試したところエラーがでました。
① npm i react-native-tableview でインストール
② TableViewタグをrenderに追加
エラー内容
ReferenceError: Can't find variable: TableView
render() { return ( <ScrollView> <Text>aaa</Text> <TableView> </TableView> ); }
③ importで下記のように宣言 (公式にドキュメントが見当たらなかったため下記で設定)
import TableView from 'react-native-tableview';
エラー内容
null is not an object (evaluating 'r(d[0]).NativeModules.RNTableViewManager.Constants')
gitを見るとXcodeにてRNTableViewManagerを追加しているような記述があるのですが、
Xcodeのプロジェクトの場所及び、RNTableViewManager.hなどの保存してある場所がよくわかっておりません。
この設定が必要なのかもしれないのですが、よく理解できておらず・・・。
あなたの回答
tips
プレビュー