0

複数の注釈を含むマップがあり、ユーザーがピンをタップして別のビューを呼び出すようにしたい。

ストーリーボードを使用しています。

.xib では、これは次のようになります。

...
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
...
[rightButton addTarget:self
                    action:@selector(showDetails:)
          forControlEvents:UIControlEventTouchUpInside];
}

-(void)showDetails:(UIButton*)sender {

     OfferDetailViewController *detail = [[OfferDetailViewController alloc] init];

     detail.context = context;

     Offers *offer = [arr objectAtIndex:indexPath.row];

     //detail.offer = offer;

    [self.navigationController pushViewController:detail animated:YES];
}

...
4

2 に答える 2

2

ビュー間にセグエを作成し、StoryBoard で識別子を与えることができます。次に、「performSegueWithIdentifier」を実行してトリガーします。したがって、ユーザーのタップによって呼び出されるメソッドでは、セグエに「FrameSegue」の識別子がある場合、「performSegueWithIdentifier」を次のように呼び出します。

[self performSegueWithIdentifier:@"FrameSegue" sender:sender];

他のビューにデータを渡すために最初にセットアップを行う必要がある場合は、「prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender」でトランジションをセットアップできます。

それが役立つことを願っています。

以下のコメントへの回答:-

「FrameSegue」として識別されたセグエがあり、ビュー「MyFirstView」から「MySecondView」という 2 番目のビューに文字列を渡し、それを 2 番目のビューの myData に格納する場合。

これを試して:

MyFirstView.m 内

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ([segue.identifier isEqualToString:@"FrameSegue"]) {

        MySecondView *secondView = [segue destinationViewController];
        [secondView setMyData:myString];
    }
}

- (IBAction)tappedThing:(id)sender {

    NSString *myString = @"A String";

    [self performSegueWithIdentifier:@"FrameSegue" sender:sender];

}
于 2012-05-31T13:00:17.367 に答える
0

mapView:annotationView:calloutAccessoryControlTapped:メソッドを実装し、代わりに実装をそこに配置しshowDetail:て、おそらく問題の注釈ビューに対していくつかの条件付きテストを実行します。

于 2012-05-31T13:06:20.350 に答える