地図アプリ:アイコンごとにリンクURLを変更する。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
katsutama1992
記事: 8
登録日時: 13年前

地図アプリ:アイコンごとにリンクURLを変更する。

#1

投稿記事 by katsutama1992 » 13年前

以前、地図アプリ作成について質問させていただきました。
http://dixq.net/forum/viewtopic.php?t=11879
再び、壁にあたってしまったので、質問させてください。
よろしくお願いいたします。

地図にアイコンを立て、
アイコンをクリックするとバルーンが表示され、
バルーンに実装したボタンをタップすると
特定のWebページを表示する新しい画面へ遷移する。
というアプリを作成しています。

新しい画面へ遷移し、Webページを表示したり、
戻るボタンを実装して、元の地図画面へ戻ったりするところまでは
完成させることができました。
(アドバイスを下さって、本当にありがとうございました。)


この、表示するWebページのURLを、
選択したアイコンによって変更したいのですが、
どのように行えば良いか、分かりません。

まず、以下に、現在作成したコードを添付させて頂きます。
幾つかのクラスを作成しており、
それを読み込むメインの ViewController.m のコードです。

コード:


//アノテーションのタイトル・サブタイトル・URLを設定するクラス MyAnnotation.h をインポート
//Webページを表示するクラス WebViewController.h をインポート

@interface FirstViewController ()

@end

@implementation FirstViewController
@synthesize Map;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [Map setDelegate: self];
    

    // 地図表示の設定
    Map.frame = self.view.bounds;
    Map.mapType = MKMapTypeStandard;
    Map.showsUserLocation = YES;
    [self.view addSubview:Map];
    [Map.userLocation addObserver:self
                       forKeyPath:@"location"
                          options:0
                          context:NULL];

    for (i=1; i<=10; i++) {
    //アノテーションをマップに追加
        MyAnnotation *annotation;
        CLLocationCoordinate2D location;
        location.latitude  = lat[i];
        location.longitude = lon[i];
        annotation =[[MyAnnotation alloc] initWithCoordinate:location];
        annotation.title = level[i];
        annotation.subtitle = comment[i];
        annotation.url = urlnum[i];       //☆☆
        
        [self.Map addAnnotation:annotation];
    }
}

//アノテーション追加
-(MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    
    //略。アノテーションを追加するプログラム//
    
}

//タップされた時の処理
- (void) mapView:(MKMapView*)_mapView annotationView:(MKAnnotationView*)annotationView calloutAccessoryControlTapped:(UIControl*)control {
    
    NSString *photourl = @"http://…";  //ここで、num[i]を元にurlを設定したい。
    
    
    PhotoViewController* web = [[WebViewController alloc] initWithUrlString:photourl];
    web.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    UINavigationController *NavigationController =
    [[UINavigationController alloc] initWithRootViewController:web];
    [self presentModalViewController:NavigationController animated:YES];
    
}


@end


lat(緯度)lon (経度)
level (アノテーションタイトル)
comment (アノテーションサブタイトル)
urlnum (WebURL) にはあらかじめ数値や文字のデータが格納されています。

この、urlnum(string型)の文字を元に、

コード:

- (void) mapView:(MKMapView*)_mapView annotationView:(MKAnnotationView*)annotationView calloutAccessoryControlTapped:(UIControl*)control {

}
の中でURLを設定し表示したいのですが、できません。

アノテーションのタイトルやサブタイトルは
annotationView.annotation.title 又は annotationView.annotation.subtitle
とプログラムすれば呼び出すことができるのですが、
URLは同様に annotationView.annotation.url と記述しても呼び出すことができません。

なぜ、タイトルやサブタイトルが呼び出すことができるのに、
URLは呼び出すことができないのでしょうか?
参考になるサイトのURLなどで教えていただけると嬉しく思います。
また、プログラムの間違っている点など、
指摘いただけると大変助かります。

長くなりましたが、
よろしくお願いいたします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 地図アプリ:アイコンごとにリンクURLを変更する。

#2

投稿記事 by h2so5 » 13年前

呼び出すことができない、とはどういう意味でしょうか?
エラーが出るということですか?

katsutama1992
記事: 8
登録日時: 13年前

Re: 地図アプリ:アイコンごとにリンクURLを変更する。

#3

投稿記事 by katsutama1992 » 13年前

返信ありがとうございます。
言葉が足りず、すみません。

NSLog(@"%@",annotationView.annotation.url);
として、とりあえずログに表示しようとしたところ、
Property 'url' not found on object of type 'id<MKAnnotation>'
というエラーが出ました。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 地図アプリ:アイコンごとにリンクURLを変更する。

#4

投稿記事 by h2so5 » 13年前

エラーメッセージの言う通りじゃないでしょうか。
MKAnnotationにurlというプロパティが無いのです。

しひ

Re: 地図アプリ:アイコンごとにリンクURLを変更する。

#5

投稿記事 by しひ » 13年前

前回のトピックに答えは書いてあるので探してみてください。
ヒントはダウンキャストです。

katsutama1992
記事: 8
登録日時: 13年前

Re: 地図アプリ:アイコンごとにリンクURLを変更する。

#6

投稿記事 by katsutama1992 » 13年前

h2so5 様、しひ様

レベルの低い質問をしてしまったようで、
恥ずかしく思います。
優しく回答してくださり、ありがとうございます。

気を悪くされたかもしれません。
前回のトピック、再びしっかり確認してみます。
ありがとうございます。

katsutama1992
記事: 8
登録日時: 13年前

Re: 地図アプリ:アイコンごとにリンクURLを変更する。

#7

投稿記事 by katsutama1992 » 13年前

大変遅くなりましたが、
ダウンキャストをヒントに以下のように記述したところ、うまくいきました。

助かりました。
本当にありがとうございました。
解決、とさせていただきます。

コード:


//タップされた時の処理
- (void) mapView:(MKMapView*)_mapView annotationView:(MKAnnotationView*)annotationView calloutAccessoryControlTapped:(UIControl*)control {

    MyAnnotation* myAnnotation = (MyAnnotation*) annotationView.annotation;
    NSString *photourl = myAnnotation.url;
    
    PhotoViewController* web = [[PhotoViewController alloc] initWithUrlString:photourl];
    web.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    UINavigationController *NavigationController = [[UINavigationController alloc] initWithRootViewController:web];
    [self presentModalViewController:NavigationController animated:YES];
    
}

閉鎖

“C言語何でも質問掲示板” へ戻る