ページ 11

iPhoneネイティブアプリ開発

Posted: 2012年11月13日(火) 16:41
by katsutama1992
MapKitを用いたマップアプリを開発しています。

地図上にアノテーションを立て、
アノテーションをタップするとコールアウトが表示され
コールアウトに実装されたボタンをタップすると
新しく画面が遷移し、
指定したURLのWebページをアプリ内で表示するアプリを開発したいと考えています。

アノテーション、コールアウト、コールアウトボタンの実装は完成しました。
しかし、コールアウトに実装されたボタンがタップされるのに応じて
新しい画面へ遷移させる方法がわかりません。

以下のコード内に処理を書き込まなければならないことはわかったのですが、
どのように書き込めばアプリ内でWebを開くことができるのかわかりません。

コード:


-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
     //処理を記述
}

今年の5月からiPhoneApp開発を始めた初心者です。
今は参考書などを見ながら開発を進めていますが、
以上の点について情報が載せられた参考書が見つからず行き詰っています。

申し訳ありませんが、
参考になるサイトのURLやコード例などで教えていただけると嬉しく思います。
よろしくお願いいたします。

Re: iPhoneネイティブアプリ開発

Posted: 2012年11月17日(土) 22:54
by hos
はじめまして。
回答じゃなくてすみません。
じつはわたしも同じようなことがわからずググっていたら
ここを見つけました。

>> 地図上にアノテーションを立て、
>> アノテーションをタップするとコールアウトが表示され
>> コールアウトに実装されたボタンをタップすると
>> 新しく画面が遷移し……

わたしの場合はそのあとwebの情報を表示するのでなく、
端末の中のデータ(文章や写真など)
を遷移先の画面に表示させたい
というところが少し違うのですが、
(例として東京タワーの所のピンをタップしたら
東京タワーの写真と観光情報などを表示する)
自分にも参考になりそうなので、
どなたか回答していただけるよう、
わたしのほうからもお願いします。

Re: iPhoneネイティブアプリ開発

Posted: 2012年11月19日(月) 15:34
by katsutama1992
返信、ありがとうございます。
私も、一番の願いを言えば hosさんのおっしゃるアプリと同じように
Webを開かず、文章や写真データを表示させたいと願っています。
しかし、インターネットで検索しても
そのようなアプリ開発の情報はヒットしません。

以下のようなサイトを発見し、
もしかしたらWebページを表示する方が簡単なのかもしれない
と思って書き込んでみました。
http://www.atmarkit.co.jp/fsmart/articl ... 03/01.html

お互いに、いい方法がみつかるといいですね。
頑張りましょう。`・ω・!

Re: iPhoneネイティブアプリ開発

Posted: 2012年11月20日(火) 23:59
by しひ
Webページを表示させたいのなら、UIWebViewを乗せたUIViewを用意し
mapView:annotationView:calloutAccessoryControlTapped:メソッド内からそれへ遷移させるだけでいいと思います。

遷移のさせ方は、今どのようにビューを管理しているのかと、どのように遷移させたいのかがわからないので何とも言えません。
横に遷移させたいのであればUINavigationBarを、下から遷移させたいのであればモーダルビューを使うことになるかと思います。

Re: iPhoneネイティブアプリ開発

Posted: 2012年11月22日(木) 01:46
by hos
しひ様
書き込みありがとうございます。
わたしはトピ主(スレ主?)ではありませんが、
参考にしたいのでありがたいです。
わたしの場合は画面の遷移までは一応できたんですが、
ただ遷移先画面が出るだけで(苦笑)、
データの受け渡しというかそれをどうやって遷移先画面に表示(反映)させるかわからないのです。
ともかく応用力がなさすぎるのがいけないのですが。
例としてタワーの位置のピンを色々セッティングしておいて
東京タワーのピンをタップしたら東京タワーの写真と簡単な説明が表示される、
スカイツリーのピンをタップしたらスカイツリーの写真と説明、
通天閣なら…(以下同様)といった具合です。
単一のデータなら自分でもなんとかなるんですが、
各々で変えなくてはならないとなると
わからなくて…情けないです。

トピ主さま
なんとか頑張っていきましょう(笑)!

Re: iPhoneネイティブアプリ開発

Posted: 2012年11月23日(金) 19:06
by しひ
いわゆる銀の弾丸は私にもわかりませんが、例えば詳細画面に新しくinitメソッドを追加するのはどうでしょうか。

遷移するときに詳細画面のインスタンスをつくりますよね。そのときにキー(例ではとりあえずタイトル)を渡すようにします。

コード:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    DetailViewController* detail =
        [[DetailViewController alloc] initWithKey:((CustomAnnotation*)view.annotation).title];
詳細画面のコントローラに-initWithKey:メソッドを実装します。

コード:

@implementation DetailViewController {
    NSString* __strong key_;
    CLLocationCoordinate2D coordinate_;
    NSString* __strong filename_;
    NSString* __strong description_;
}

- (id)initWithKey:(NSString*)key {
    self = [super initWithNibName:@"DetailViewController" bundle:nil]; // ここは実装によりけり

    if (self) {
        key_ = key;
    }
    
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // あらかじめ建物の情報(名前とか座標とか写真のファイル名とか説明文とか)を辞書にしておいて
    // 更にキー(例ではタイトル)で引っ張ってこれるようにする
    BuildingInformation* informations =
        @{@"東京タワー":
            @{"latitude":@(35.655333),
                @"longitude":@(139.779722),
                @"filename":@"tokyotower.jpg",
                @"description":@"赤い"}},
        @{@"スカイツリー":
            ...

    // アノテーションから渡されたキー(例ではタイトル)を元に情報を引っ張ってくる
    NSDictionary* building = [informations objectForKey:key_];
    
    // 取り出す
    const double latitude = [(NSNumber)[building objectForKey:@"latitude"] doubleValue];
    const double longitude = [(NSNumber)[building objectForKey:@"longitude"] doubleValue];
    coordinate_ =  CLLocationCoordinate2DMake(latitude, longitude);
    filename_ = [building objectForKey:@"filename"];
    description_ = [building objectForKey:@"description"];

    ...
という感じです。

アノテーション作成時もキーから座標などを取得できるようにしておくと良いですね。
例では手を抜いて何でもかんでも辞書に放り込んでいますが、実際にやるときはきちんとクラス化したほうが良いと思います。
それと、間違えても例のように- viewDidLoadメソッド内に値を埋め込んだりしないようにしてください。

Re: iPhoneネイティブアプリ開発

Posted: 2012年11月27日(火) 14:25
by katsutama1992
しひ様、数々の貴重なアドバイスありがとうございます。
返信が遅くなってしまいまして、大変申し訳ございません。
もう返信はないかもしれない…と諦めつつあったので
とても嬉しいです。

初心者なもので、理解するにも時間がかかってしまうのですが
提案頂いたプログラムを少しずつ進めていきます。
いい結果をご報告できるようにがんばります!

Re: iPhoneネイティブアプリ開発

Posted: 2012年12月14日(金) 14:56
by katsutama1992
無事、Webページを表示するクラスを作成し、
画面を遷移させることに成功しました。

返信、アドバイスをくださってありがとうございました。

今度は、選択したアノテーションによって
表示するWebページのURLを変更する方法について
トピックを立てさせていただこうと思います。

引き続き、一緒に考えていただけると嬉しく思います。
よろしくお願いいたします。