2016-09-23 84 views
4

我已经尝试通过调用MapView.Marker标签中的onPress方法,但它不工作。标记点击事件反应本地地图不工作反应ios

这种方法用于跟踪标记点击:

markerClick(){ 
     console.log("Marker was clicked"); 
} 

在渲染方法,地图部件的声明显示地图和地图上的标记 。在onPress方法中,我调用了我自定义的方法 markerClicked()。我仍然没有得到结果。

render() { 
     return (

      <View style={styles.container}> 
      <MapView style={styles.map} 
       initialRegion={{ 
        latitude: 37.78825, 
        longitude: -122.4324, 
        latitudeDelta: 0.0, 
        longitudeDelta: 0.0, 
       }} 
      > 
      {this.state.markers.map(marker => (
       <MapView.Marker 
       coordinate={marker.coordinate} 
       title={marker.title} 
       description={marker.description} 
       onPress={() => this.markerClick()} 
       /> 
      ))} 
      </MapView> 
     </View> 
    ); 
    } 

回答

4

你只需要添加<MapView.Callout><MapView.Marker>标记。 自定义标注 - 您可以根据需要自定义标记信息点击窗口。

我已经使用TouchableHighlightmarker info window click,这样就可以能够用户重定向到其他屏幕上的custom callout点击。

<View style={styles.mainContainer}> 
        <MapView style={styles.map} 
          initialRegion={{ 
           latitude: 37.78825, 
           longitude: -122.4324, 
           latitudeDelta: 0.0, 
           longitudeDelta: 0.0, 
          }}> 
          {this.state.markers.map((marker) => (
           <MapView.Marker 
           coordinate={marker.coordinate} 
           title={marker.title} 
           description={marker.description}> 
            <MapView.Callout tooltip style={styles.customView}> 
             <TouchableHighlight onPress= {()=>this.markerClick()} underlayColor='#dddddd'> 
              <View style={styles.calloutText}> 
               <Text>{marker.title}{"\n"}{marker.description}</Text> 
              </View> 
             </TouchableHighlight> 
            </MapView.Callout> 
           </MapView.Marker> 
          ))} 
        </MapView> 
        </View> 
+0

谢谢。当我在地图标记视图中添加了时,它正在工作。 – BK19

1

尝试在你的标记添加一个 “关键”:

{this.state.markers.map((marker, i) => (
    <MapView.Marker 
     key={i} 
     coordinate={marker.coordinate} 
     title={marker.title} 
     description={marker.description} 
     onPress={() => this.markerClick()} 
    /> 
))} 

只要使用 'i' 的测试,你应该使用一个唯一的ID

+0

这不适合我。我已经使用了与上面提到的相同的代码。 – BK19

+0

你有任何其他**解决方案**相关**标记点击**在反应原生ios。 我在''组件中添加了'key = {i}'元素,但仍然没有点击标记正在工作。 – BK19

2

为了增加Anil的回答,您可以使用“onCalloutPress”回调的标记来处理标注的新闻发布会上,这样你就不需要在标注一个TouchableHighlight:

<MapView.Marker 
    coordinate={marker.coordinate} 
    title={marker.title} 
    description={marker.description} 
    onCalloutPress={this.markerClick}> 
    <MapView.Callout tooltip style={styles.customView}> 
     <View style={styles.calloutText}> 
      <Text>{marker.title}{"\n"}{marker.description}</Text> 
     </View> 
    </MapView.Callout> 
</MapView.Marker> 
-1
<MapView.Marker key={index} coordinate={marker.coordinate} 
    title={marker.title} 
    description={marker.description} 
    onPress={e => this.onPressMarker(e,index)} 
> 
+0

代码只接受,请添加说明 –