2015-03-09 4 views
0

Я разбираю данные из файла csv с координатами и другой информацией. У меня есть строчки, и я хотел бы знать, как добавить другие фрагменты данных в объект субтитров контактов. Вот мой подход (объект Я пытаюсь добавить это "температура"):Несколько аннотаций субтитров Pin в MapKit?

ViewController.h

NSString * latitude = [infos objectAtIndex:1]; 
    NSString * longitude = [infos objectAtIndex:2]; 
    NSString * description =[infos objectAtIndex:3]; 
    NSString * address = [infos objectAtIndex:4]; 
    NSString * temperature = [infos objectAtIndex:5]; 

    CLLocationCoordinate2D coordinate; 
    coordinate.latitude = latitude.doubleValue; 
    coordinate.longitude = longitude.doubleValue; 
    Location *annotation = [[Location alloc] initWithName:description address:address temperature:temperature coordinate:coordinate] ; 
    [mapview addAnnotation:annotation]; 

Location.h

@interface Location : NSObject { 
NSString *_name; 
NSString *_address; 
NSString *_temperature; 
CLLocationCoordinate2D _coordinate; 
} 

@property (copy) NSString *name; 
@property (copy) NSString *address; 
@property (copy) NSString *temperature; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 

- (id)initWithName:(NSString*)name address:(NSString*)address temperature:  
    (NSString*)temperature coordinate:(CLLocationCoordinate2D)coordinate; 

Location.m

@implementation Location 
@synthesize name = _name; 
@synthesize address = _address; 
@synthesize coordinate = _coordinate; 
@synthesize temperature = _temperature; 

- (id)initWithName:(NSString*)name address:(NSString*)address temperature:(NSString*)temperature coordinate:(CLLocationCoordinate2D)coordinate { 
if ((self = [super init])) { 
    _name = [name copy]; 
    _address = [address copy]; 
    _temperature = [temperature copy]; 
    _coordinate = coordinate; 
} 
return self; 
} 

- (NSString *)title { 
if ([_name isKindOfClass:[NSNull class]]) 
    return @"Unknown charge"; 
else 
    return _name; 
} 

- (NSString *)subtitle { 
return _address; 
return _temperature; 

} 

Как вы можете видеть, я попытался добавить объект «температура» в методе «субтитры», к сожалению, который не отображался в ann otation. Прямо сейчас я пытаюсь с объектом температуры, но мне нужно построить еще несколько, поэтому мне нужен способ добавить как можно больше объектов.

ответ

0

В методе subtitle:

- (NSString *)subtitle { 
return _address; 
return _temperature; 

} 

ничего после return _address; линии будет выполнять.

Вот как работает оператор return (выполнение возвращается непосредственно вызывающему абоненту).

Не путайте расположение кода с тем, как указанные переменные отображаются в пользовательском интерфейсе.

Кроме того, встроенная выноска в MapKit поддерживает только одну короткую линию для title и subtitle. Попытка отобразить несколько строк в каждой собственности приведет к разочарованию.

Так что вы можете сделать:

- (NSString *)subtitle { 
    return _address; 
} 

или:

- (NSString *)subtitle { 
    return _temperature; 
} 

или:

- (NSString *)subtitle { 
    //display "address, temperature"... 
    return [NSString stringWithFormat:@"%@, %@", _address, _temperature]; 
} 


Если необходимо отобразить выноски с гораздо более подробно, чем по умолчанию , вам нужно закодировать пользовательское представление выносок, которое может стать сложным. См. Custom MKAnnotation callout bubble with button и Show custom and default callout views on different pins with pin clustering on map view для нескольких примеров, чтобы начать с того, если они заинтересованы.


Кстати, неродственного, но, тем Location класс должен объявить, что он реализует протокол MKAnnotation. Это поможет вам и компилятору избежать или отобразить соответствующие предупреждения и самодокументирование кода в качестве побочного преимущества:

@interface Location : NSObject<MKAnnotation> { 
+0

Большое спасибо :) Если его не так много спросить, знаете ли вы, как я мог бы разделять каждый объект, перемещая его вниз, вместо комы или пространства рядом с ним, а также, как иметь фиксированные символы, например, для температуры. Я не получаю данные с символом «ºCº», в конце я хотел бы напишите его так, чтобы он появился в аннотации. Еще раз спасибо. – J320

+0

Вы не можете переместить его в линию, потому что выноска по умолчанию не поддерживает динамическую высоту.Изучение того, как [формат] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/FormatStrings.html). NSString является [базовым Objective-C] (https: // разработчиком. apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1). Пример: 'return [NSString stringWithFormat: @" Temp is% @ ° C ", _temperature];' – Anna

Смежные вопросы