1

ユーザーが場所の場所の名前を 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 メソッドを適切に使用するのを手伝ってください。クラス内から場所が検索されたときにのみ適切な場所が表示され、インスタンス化されたときに適切な場所が表示されないためです。

4

1 に答える 1

1

ここでは、stringLoc1 をアドレス フィールドの内容で上書きします。初期値に関係なく上書きされます。textField が空の場合、空の文字列で上書きされます。

stringLoc1 = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
                       [addressField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

残りのコードのコンテキストで最善の解決策が何であるかはわかりません。しかし、これはうまくいくはずです:

NSString *currentLoc;

if (addressField.text && ([addressField.text length] == 0)) {
  currentLoc = addressFiled.text;
  stringLoc1 = addressField.text; // this line will set the current value as default value for the next call of the method; unless a new init call comes in between.
}
else
  currentLoc = stringLoc1; 


    currentLoc = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
                           [currentLoc  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:currentLoc ]];

それを行うためのよりスマートな方法があると確信しています。しかし、これは、あなたが私たちと共有したコードの行を表示するための最小限の変更で動作するはずです.

于 2012-07-11T07:46:29.630 に答える