早上好StackOverflow,得到我的自定义注释呼叫在我的'europeMapView'上工作后,我现在需要将用户发送到webView,现在我想让webView从JSON文件中加载一个URL,具体取决于哪个标注是点击。我相信我应该使用NSJSONSerialization,虽然我不知道如何实现这个?自定义注释以可能的JSON发送到webView?
所以在'europeMapView'当'罗马'呼出按钮被点击时,它将使用户'europeWebView'并加载字符串www.ThingsAboutRome.com。
我想我可以只为每个注释拥有一个webView,但这似乎非常低效。 (加上我无法即时更改网址)。
我也在使用Storyboard。
#import "UKFlightsEuropeMap.h"
#import "Annotation.h"
@interface UKFlightsEuropeMap()
@end
@implementation UKFlightsEuropeMap
@synthesize europeMapView;
//Define the Long and Lat of different European cities.
#define EUROPE_LATITUDE 47.3690;
#define EUROPE_LONGITUDE 8.5380;
#define LONDON_LATITUDE 51.5171;
#define LONDON_LONGITUDE 0.1062;
#define PARIS_LATITUDE 48.8742;
#define PARIS_LONGITUDE 2.3470;
#define BRUSSELS_LATITUDE 50.75;
#define BRUSSELS_LONGITUDE 4.53333;
#define BERLIN_LATITUDE 52.5;
#define BERLIN_LONGITUDE 13.35;
#define MUNICH_LATITUDE 48.1333;
#define MUNICH_LONGITUDE 11.5667;
#define ZURICH_LATITUDE 47.3690;
#define ZURICH_LONGITUDE 8.5380;
#define MILAN_LATITUDE 45.4640;
#define MILAN_LONGITUDE 9.1916;
#define MADRID_LATITUDE 40.4000;
#define MADRID_LONGITUDE -3.6833;
#define ROME_LATITUDE 41.9000;
#define ROME_LONGITUDE 12.5000;
#define LISBON_LATITUDE 38.7000;
#define LISBON_LONGITUDE 9.1833;
#define VIENNA_LATITUDE 48.2088;
#define VIENNA_LONGITUDE 16.3726;
#define THE_SPAN 0.01f;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[europeMapView setDelegate:self];
// Do any additional setup after loading the view.
//Create my region
MKCoordinateRegion myRegion;
//Set region centre
CLLocationCoordinate2D center;
center.latitude = EUROPE_LATITUDE;
center.longitude = EUROPE_LONGITUDE;
//Set span (zoom level)
MKCoordinateSpan span;
span.latitudeDelta = THE_SPAN;
span.longitudeDelta = THE_SPAN;
myRegion.center = center;
myRegion.span = span;
//Set our region to the europeMapView
[europeMapView setRegion:myRegion animated:YES];
//Annotation
NSMutableArray * locations = [[NSMutableArray alloc] init];
CLLocationCoordinate2D location;
Annotation * myAnn;
//London Annotation
myAnn = [[Annotation alloc] init];
location.latitude = LONDON_LATITUDE;
location.longitude = LONDON_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"London";
myAnn.subtitle = @"London City";
[locations addObject:myAnn];
//Paris Annotation
myAnn = [[Annotation alloc] init];
location.latitude = PARIS_LATITUDE;
location.longitude = PARIS_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Paris";
myAnn.subtitle = @"City of Love";
[locations addObject:myAnn];
//Brussels Annotation
myAnn = [[Annotation alloc] init];
location.latitude = BRUSSELS_LATITUDE;
location.longitude = BRUSSELS_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Brussels";
myAnn.subtitle = @"Brussels";
[locations addObject:myAnn];
//Berlin Annotation
myAnn = [[Annotation alloc] init];
location.latitude = BERLIN_LATITUDE;
location.longitude = BERLIN_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Berlin";
myAnn.subtitle = @"Berlin";
[locations addObject:myAnn];
//Munich Annotation
myAnn = [[Annotation alloc] init];
location.latitude = MUNICH_LATITUDE;
location.longitude = MUNICH_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Munich";
myAnn.subtitle = @"Munich";
[locations addObject:myAnn];
//Zurich Annotation
myAnn = [[Annotation alloc] init];
location.latitude = ZURICH_LATITUDE;
location.longitude = ZURICH_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Zurich";
myAnn.subtitle = @"Zurich";
[locations addObject:myAnn];
//Milan Annotation
myAnn = [[Annotation alloc] init];
location.latitude = MILAN_LATITUDE;
location.longitude = MILAN_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Milan";
myAnn.subtitle = @"Milan";
[locations addObject:myAnn];
//Madrid Annotation
myAnn = [[Annotation alloc] init];
location.latitude = MADRID_LATITUDE;
location.longitude = MADRID_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Madrid";
myAnn.subtitle = @"Madrid";
[locations addObject:myAnn];
//Rome Annotation
myAnn = [[Annotation alloc] init];
location.latitude = ROME_LATITUDE;
location.longitude = ROME_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Rome";
myAnn.subtitle = @"Rome";
[locations addObject:myAnn];
//Lisbon Annotation
myAnn = [[Annotation alloc] init];
location.latitude = LISBON_LATITUDE;
location.longitude = LISBON_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Lisbon";
myAnn.subtitle = @"Lisbon";
[locations addObject:myAnn];
//Vienna Annotation
myAnn = [[Annotation alloc] init];
location.latitude = VIENNA_LATITUDE;
location.longitude = VIENNA_LONGITUDE;
myAnn.coordinate = location;
myAnn.title = @"Vienna";
myAnn.subtitle = @"Vienna";
[locations addObject:myAnn];
//Add the NSMutable Array to the europeMapView.
[self.europeMapView addAnnotations:locations];
}
//Customize the annotation callouts.
-(MKAnnotationView *) mapView:(MKMapView *)europeMapView viewForAnnotation: (id<MKAnnotation>)annotation { MKPinAnnotationView *MyPin=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"current"];
MyPin.pinColor = MKPinAnnotationColorPurple;
UIButton *advertButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
if ([[annotation title] isEqualToString:@"London"]){
[advertButton addTarget:self action:@selector(LondonClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Paris"]){
[advertButton addTarget:self action:@selector(ParisClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Brussels"]){
[advertButton addTarget:self action:@selector(BrusselsClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Berlin"]){
[advertButton addTarget:self action:@selector(BerlinClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Munich"]){
[advertButton addTarget:self action:@selector(MunichClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Zurich"]){
[advertButton addTarget:self action:@selector(ZurichClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Milan"]){
[advertButton addTarget:self action:@selector(MilanClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Madrid"]){
[advertButton addTarget:self action:@selector(MadridClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Rome"]){
[advertButton addTarget:self action:@selector(RomeClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Lisbon"]){
[advertButton addTarget:self action:@selector(LisbonClicked:) forControlEvents:UIControlEventTouchUpInside];
}
if ([[annotation title] isEqualToString:@"Vienna"]){
[advertButton addTarget:self action:@selector(ViennaClicked:) forControlEvents:UIControlEventTouchUpInside];
}
MyPin.rightCalloutAccessoryView = advertButton;
MyPin.draggable = NO;
MyPin.highlighted = YES;
MyPin.animatesDrop = TRUE;
MyPin.canShowCallout = YES;
return MyPin;
}
//Show that the detailDisclosure Button has been pressed.
-(void)LondonClicked:(id)sender {
NSLog(@"London Clicked");
}
-(void)ParisClicked:(id)sender {
NSLog(@"Paris Clicked");
}
-(void)BrusselsClicked:(id)sender {
NSLog(@"Brussels Clicked");
}
-(void)BerlinClicked:(id)sender {
NSLog(@"Berlin Clicked");
}
-(void)MunichClicked:(id)sender {
NSLog(@"Munich Clicked");
}
-(void)ZurichClicked:(id)sender {
NSLog(@"Zurich Clicked");
}
-(void)MilanClicked:(id)sender {
NSLog(@"Milan Clicked");
}
-(void)MadridClicked:(id)sender {
NSLog(@"Madrid Clicked");
}
-(void)RomeClicked:(id)sender {
NSLog(@"Rome Clicked");
}
-(void)LisbonClicked:(id)sender {
NSLog(@"Lisbon Clicked");
}
-(void)ViennaClicked:(id)sender {
NSLog(@"Vienna Clicked");
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
编辑:JSON文件的示例。
{
"ID": "London",
"Link": "http://www.London.co.uk",
"ID": "Paris",
"Link": "http://www.Paris.fr"
}
非常感谢您的时间。
Nick。
我不明白你的情况completey:你是否将数据存储在json(文件)中,就像一个位置是一个对象,在那里你可以找到要点击的链接?您可以使用loadRequest:方法来更改webview的页面。 – 2013-02-26 11:31:53
是的,所以我会将URL存储到JSON文件中的各个站点(可通过Web地址访问),我只是不知道如何实现一个方法来告诉webView加载哪个Web地址取决于哪个注释是点击。 – 2013-02-26 12:51:26
你的城市是否有硬编码?我想他们是,否则你已经知道如何从JSON加载它们,对吧?如果他们是硬编码的,您可能需要为他们设置一个密钥,以便您可以将硬编码城市链接到JSON中的一个城市。你可以添加一个你的JSON的例子吗? – 2013-02-26 12:59:33