菜鸟教程小白 发表于 2022-12-12 17:09:55

ios - 更新 MKMapview 注释不起作用?


                                            <p><p>我有一个带有 MKMapKit 和 PickerView.Like 的 UIViewcontroller,如下图所示。
<img src="/image/3q4j5.png" alt="UIViewcontroller"/>
我有一个 plist,其中包含与 PickerView 中的值相对应的所有坐标。因此,一旦我从 PickerView 中选择任何项目,我将刷新当前 map 并获取新项目的坐标(有时可能是 5 到 6 个坐标) 并在 map 中显示。</p>

<p>但对我来说,我可以看到“注释”正在进入 mapView ,但是当我单击另一个项目时,以前的图钉仍然存在于 map 中。</p>

<p>我只想显示所选 PickerView 项目的注释图钉。请帮助我</p>

<p>用例:
这是我的 plist 文件
<img src="/image/oMjQF.png" alt="enter image description here"/> </p>

<p>在我的 plist 中有一个名为“类别”的字段,Pickerview 中列出的项目是总类别列表。</p>

<p>因此,当我滚动 PickerView 时,我将检查所选项目是否与 Plist 类别字段中的任何项目匹配。如果其匹配的 iam 在 mapView 中显示它们的坐标。</p>

<p>但是当我点击 PickerView 中的“restuarents”类别时,我得到了正确的以下 map 。</p>

<p> <img src="/image/iCPI5.png" alt="enter image description here"/> </p>

<p>当我点击“cluburi”类别时,它应该在 map 中显示 2 个 Pin 图而不是 3 个。实际上它没有从 map 中清除当前的“restuarent”Pin。如下图 <img src="/image/h2RjL.png" alt="enter image description here"/> </p>

<p>那么如何在显示新 Pin 图之前清除 map 中的先前 Pin 图?</p>

<p>这是我在 viewcontroller.m 文件中的代码</p>

<pre><code>-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return ;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return ;
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{

animated:YES];

    for(int j=0;j&lt;[ count];j++)
    {
      if([[ objectAtIndex:j] isEqualToString:])
         {


            coordinate.latitude=[ floatValue];
            coordinate.longitude=[ floatValue];
            annotation = [ initWithCoordinate:coordinate title:[objectAtIndex:j]];
            ;


      }

    }

}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {
    //7
    if(])
      return nil;

    //8
    static NSString *identifier = @&#34;myAnnotation&#34;;
    MKPinAnnotationView * annotationView = (MKPinAnnotationView*);
    if (!annotationView)
    {
      //9
      annotationView = [ initWithAnnotation:annotation reuseIdentifier:identifier];
      annotationView.pinColor = MKPinAnnotationColorPurple;
      annotationView.animatesDrop = YES;
      annotationView.canShowCallout = YES;
    }else {
      annotationView.annotation = annotation;
    }
    annotationView.rightCalloutAccessoryView = ;
    return annotationView;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>所以在我的应用程序中,我创建了一个继承自 <code>MKAnnotationView</code> 的自定义类作为 <code>btMapAnnotation</code>。您必须在选择器控件中选择任何对象时进行此调用。</p>

<pre><code>for (NSObject *a in ) {
    if (]) {
      btMapAnnotation *annotation = (btMapAnnotation *)a;
      ;
    }
}
</code></pre>

<p>此调用完成后,只需将新注释添加到您的 map 。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 更新 MKMapview 注释不起作用?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20580718/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20580718/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 更新 MKMapview 注释不起作用?