ユーザーが場所の場所の名前を UITextField に入力して検索をクリックできる .xib ファイルがあります。次に、別の .xib ファイルがロードされ、マップ上の場所を含む MapView オブジェクトがユーザーに表示されます。
ユーザーがボタンをクリックしたときに次のように文字列を渡すカスタム init メソッドを作成しました。
AddLocViewController *locView = [[AddLocViewController alloc] initWithNibName:nil bundle:nil customLoc:textLoc.text];
[self presentModalViewController:locView animated:YES];
AddLocViewController.m と呼ばれる新しい ViewController クラスでは、init メソッドと viewDidLoad は次のようになります。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil customLoc:(NSString*)_loc
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
stringLoc1 = _loc;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self showAddress];
}
ここで [self showAddress] は、mapView オブジェクトにコンテンツを表示するメソッドを呼び出します。UITextField が入力を受け取り、ボタンをクリックして値を NSString オブジェクト stringLoc に設定し、それを showAddress メソッドで使用すると、showAddress メソッドは完全に機能します。
- (void) showAddress
{
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.01f;
span.longitudeDelta=0.01f;
stringLoc1 = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv",
[addressField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:stringLoc1]];
NSArray *listItems = [locationString componentsSeparatedByString:@","];
double aLatitude = 0.0;
double aLongitude = 0.0;
if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
aLatitude = [[listItems objectAtIndex:2] doubleValue];
aLongitude = [[listItems objectAtIndex:3] doubleValue];
}
else {
[addressField setText: @"Address Location error"];
return;
}
[addressField resignFirstResponder];
CLLocationCoordinate2D location = {latitude: aLatitude, longitude:aLongitude};
region.span=span;
region.center.latitude = aLatitude;
region.center.longitude = aLongitude;
if(addAnnotation != nil) {
[mapView removeAnnotation:addAnnotation];
//[addAnnotation release];
addAnnotation = nil;
}
addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:location];
[mapView addAnnotation: addAnnotation];
[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];
}
ここでこのクラスにパラメーターを渡し、showAddress メソッドを適切に使用するのを手伝ってください。クラス内から場所が検索されたときにのみ適切な場所が表示され、インスタンス化されたときに適切な場所が表示されないためです。