Ответ 1
Объекты в selectedAnnotations являются экземплярами MKAnnotation
NSArray *selectedAnnotations = mapView.selectedAnnotations;
for(id annotation in selectedAnnotations) {
[mapView deselectAnnotation:annotation animated:NO];
}
У меня есть MKMapView, у которого есть несколько аннотаций. Выбор штифта отображает выноску и нажатие на аксессуар вызывает новый стек управления представлением в стеке. Однако, когда я возвращаюсь из этого нового VC, выноска остается открытым. Как его закрыть?
Я пробовал
if([[myMapView selectedAnnotations] count] > 0)
{
//deselect that annotation
[myMapView deselectAnnotation:[[myMapView selectedAnnotations] objectAtIndex:0] animated:NO];
}
но это не работает. Выбранные аннотации имеют единственную запись в массиве, поэтому она входит в этот оператор, но выноска не закрывается.
Нужно ли добавить что-то в мою реализацию MKAnnotation или мой MKPinAnnotationView?
Объекты в selectedAnnotations являются экземплярами MKAnnotation
NSArray *selectedAnnotations = mapView.selectedAnnotations;
for(id annotation in selectedAnnotations) {
[mapView deselectAnnotation:annotation animated:NO];
}
Если вы хотите придерживаться документации по набору карт.
for (NSObject<MKAnnotation> *annotation in [mapView selectedAnnotations]) {
[mapView deselectAnnotation:(id <MKAnnotation>)annotation animated:NO];
}
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView,
calloutAccessoryControlTapped control: UIControl)
{
let pin = view.annotation
mapView.deselectAnnotation(pin, animated: false)
performSegueWithIdentifier("Next VC Segue", sender: nil)
}
Отмените выделение аннотации перед тем, как переходить к новому контроллеру представления. Таким образом, он исчезнет, когда вы вернетесь.
Вместо хорошего решения в представлении viewWillAppear работает следующий хакерский подход: анимированный
for( MyMapAnnotation *aMKAnn in [myMapView annotations])
{
//dodgy select then deselect each annotation
[myMapView selectAnnotation:aMKAnn animated:NO];
[myMapView deselectAnnotation:aMKAnn animated:NO];
}
у выбранного массива Annotations есть 1 значение, но отмена этого значения по-прежнему не закрыла вызов? Поэтому я просто перебираю все аннотации и выбираю и снимаю выделение. У меня не так много аннотаций, так что, возможно, не так уж плохо, что производительность удалась?
Я был бы признателен за элегантное решение, если у кого-то есть лучшие идеи?
Когда вы отскакиваете контакт, выносок должен уходить...
- (void)deselectAllAnnotations
{
NSArray *selectedAnnotations = [self.mapViewObj.mapView selectedAnnotations];
for (int i = 0; i < [selectedAnnotations count]; i++) {
[self.mapViewObj.mapView deselectAnnotation:[selectedAnnotations objectAtIndex:i] animated:NO];
}
}
Это может помочь вам в решении вашей проблемы.
стриж
Закрыть (отменить выбор) все аннотации программно...
mapView.selectedAnnotations.forEach({ mapView.deselectAnnotation($0, animated: false) })