Как передать тег отправителя в DetailView, чтобы получить приложение Map по умолчанию для направления?

Я открываю Detailview на аннотационной булавке, а также на tableview. Чтобы получить направление от подробностей, у меня есть следующее событие нажатия кнопки.

Отредактировано:: with -(IBAction)showDirectionUpdated; кодирование

      -(IBAction)showDirectionUpdated;
    {

NSIndexPath *selectedIndexPath = [self._tableView indexPathForSelectedRow];

if( selectedIndexPath == [self._tableView indexPathForSelectedRow])
 {
    marker *aMarker = (marker *)[appDelegate.markers objectAtIndex:selectedIndexPath.row];

NSString *EndLoc=[NSString stringWithFormat:@"%@ %@", aMarker.address,aMarker.city];

NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=Current Location&daddr=%@",EndLoc];
        NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        [[UIApplication sharedApplication] openURL:url];
        NSLog(@"%@",url);
        [url release];      

[self._tableView deselectRowAtIndexPath:selectedIndexPath animated:YES];
}
else
{ 

     //here if I am opening the detailview from annotation callout button and calling 
   // direction in map default app. But respective address is not passing 
    //in default map app
    NSInteger selectedIndex = [sender tag];
    AddressAnnotation *selectedObject = [self.annobjs objectAtIndex:selectedIndex];

marker *aMarker = [appDelegate.markers objectAtIndex:selectedIndex];
        NSString *EndLoc=[NSString stringWithFormat:@"%@ %@", aMarker.address,aMarker.city];

        NSString* addr = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=Current Location&daddr=%@",EndLoc];
        NSURL* url = [[NSURL alloc] initWithString:[addr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        [[UIApplication sharedApplication] openURL:url];
        NSLog(@"%@",url);
        [url release];

    }

}

Я хочу передать отправителя или идентификатор для вызова соответствующего направления из detailView, которое я получаю при нажатии аннотации. Мне удалось получить приложение по умолчанию для направления из подробного представления, которое я получаю, выбирая табличное представление (просмотр списка). Вот некоторый код тега отправителя.

Отредактировано 2=== с помощью viewForAnnotation

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id   <MKAnnotation>) annotation
 {     MKAnnotationView *annView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@""];

 if (annView == nil)
 {
    annView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@""] autorelease];
    annView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

}


annView.image = [UIImage imageNamed:@"flag.png"];
annView.annotation = annotation;
[annView setEnabled:YES];
[annView setCanShowCallout:YES];
 return annView;

 }

 -(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
  {
NSLog(@"calloutAccessoryControlTapped");

MKAnnotationView* annView = (MKAnnotationView*) view;
AddressAnnotation* annotation = (AddressAnnotation*)[annView annotation];


if(BcardView.hidden == YES)
{
    SearchView.hidden = YES;

    BcardView.hidden = NO;


    BackButtontitle.text = @"Map View";

    marker *aMarker = [[marker alloc]init];

    ShowroomName.text = aMarker.name;
      }}

person Navnath Memane    schedule 24.11.2011    source источник
comment
Непонятно, о какой части кода вы спрашиваете. Кроме того, гораздо проще использовать метод делегата calloutAccessoryControlTapped вместо пользовательского метода. Подход с тегами, даже если он работает, излишне сложен.   -  person    schedule 24.11.2011
comment
Хорошо, я снова обновляю код в -(IBAction)showDirectionUpdated; действие. Я говорю о другой {} части этого. Прочтите комментарий в else {}part of -(IBAction)showDirectionUpdated;   -  person Navnath Memane    schedule 25.11.2011
comment
Пока я успешно передаю соответствующий адрес для направления в приложении карты по умолчанию, указав индекс таблицы в части if{}. Я хочу тот же трюк в другой части, передав индекс или идентификатор кнопки выноски аннотации.   -  person Navnath Memane    schedule 25.11.2011
comment
Сообщение AddressAnnotation.h и marker.h. Использование тегов и зависимость от определенных индексов массива создает ненужную сложность и хрупкость. Вы должны иметь возможность просто использовать ссылки на объекты напрямую. Также код метода viewForAnnotation выглядит неидеально и, опять же, я рекомендую использовать calloutAccessoryControlTapped (в котором view.annotation дает вам объект аннотации) вместо пользовательского метода.   -  person    schedule 25.11.2011
comment
Хорошо, я использовал calloutAccessoryControlTapped, но теперь он не открывает соответствующий вид аннотации булавки :(:(. Как я могу выполнить мой запрос выше???   -  person Navnath Memane    schedule 28.11.2011
comment
Опубликуйте код метода выноски.   -  person    schedule 28.11.2011
comment
Можете ли вы дать мне подсказку, как view.annotation будет сравниваться с моим кодом выше???   -  person Navnath Memane    schedule 28.11.2011
comment
Я отредактировал некоторый код в ViewForAnnotation и методе выноски ниже...   -  person Navnath Memane    schedule 28.11.2011


Ответы (1)


Основываясь на опубликованном коде, вот мое понимание:

marker — это класс верхнего уровня, в котором хранятся все сведения о местоположении, включая address и city.

AddressAnnotation — это класс, который реализует протокол MKAnnotation, в настоящее время содержащий только координату, заголовок и подзаголовок для местоположения (у него нет address и city). Это класс, используемый для создания объектов, которые передаются методу addAnnotation представления карты.

Что вы хотели бы сделать, так это то, что при нажатии кнопки выноски на аннотации вы хотели бы показать какой-то подробный вид или информацию, для которой требуются address и city.

Вместо того, чтобы пытаться отслеживать индексы массива с помощью тегов или искать объекты в массивах, я предлагаю добавить ссылку на marker в AddressAnnotation. Таким образом, когда у вас есть объект AddressAnnotation, вы можете получить связанный с ним объект marker, используя эту ссылку (без поиска или индексов).

В классе AddressAnnotation добавьте сохраняемое свойство типа marker с именем parentMarker. Когда вы создаете объект AddressAnnotation из marker и перед вызовом addAnnotation установите для свойства parentMarker текущее значение marker.

Затем в calloutAccessoryControlTapped приведите view.annotation к AddressAnnotation, чтобы получить легкий доступ к свойству parentMarker. Теперь вы можете получить address и city из маркера. (Кстати, в этом методе вам не нужно преобразовывать view в MKAnnotationView, так как оно уже есть и вам не нужно называть его annView.)

Я не уверен, что такое BcardView и почему вы проверяете, скрыто оно или нет.

Я бы также предложил небольшое улучшение метода viewForAnnotation (используйте непустой идентификатор повторного использования и переместите настройку свойств, которые не изменяются, внутрь if):

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>) annotation
{
    MKAnnotationView *annView = (MKAnnotationView *)[mapView 
        dequeueReusableAnnotationViewWithIdentifier:@"AddrAnnot"];

    if (annView == nil)
    {
        annView = [[[MKAnnotationView alloc] initWithAnnotation:annotation 
            reuseIdentifier:@"AddrAnnot"] autorelease];
        annView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        annView.image = [UIImage imageNamed:@"flag.png"];
        [annView setEnabled:YES];
        [annView setCanShowCallout:YES];
    }

    annView.annotation = annotation;

    return annView;
}
person Community    schedule 28.11.2011
comment
Привет, Анна. У меня есть следующий запрос по ссылке http://stackoverflow.com/questions/8557719/how-to-change-annotation-callout-button-color-in-iphone. Я могу добавить пользовательскую кнопку в пузырек выноски, но она не отображается. Он работает правильно, но эта пользовательская кнопка со стрелкой видна только при нажатии. У тебя есть идея?? - person Navnath Memane; 22.12.2011
comment
Попробуйте изменить UIControlStateHighlighted на UIControlStateNormal. Кстати, почему вы до сих пор используете теги и индексы? - person ; 22.12.2011
comment
Спасибо Анна за ответ в комментарии выше :) Да, я не использую теги и индексы. Я сделал изменения в соответствии с вашим предложением. - person Navnath Memane; 22.12.2011
comment
Также возможно ли сделать всю аннотацию по умолчанию кликабельной?? - person Navnath Memane; 22.12.2011
comment
Нет, не самый простой способ с пузырем по умолчанию. - person ; 22.12.2011
comment
Хорошо, спасибо за быстрый ответ. Ааа, мой проект Map App завершен. Вы помогли мне в моих 4-5 запросах. Еще раз спасибо. Я желаю вам очень-очень счастливого Рождества и счастливого нового года - person Navnath Memane; 22.12.2011