当用户点击mapview中的pin时,调用另一个视图

时间:2012-05-31 12:54:32

标签: objective-c cocoa-touch mkmapview

我有一个带有多个注释的Map,我希望母鸡用户点击pin来调用另一个视图。

我正在使用故事板。

使用.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];
}

...

2 个答案:

答案 0 :(得分:2)

您可以在视图之间创建一个Segue,并在StoryBoard中为其指定一个标识符。然后执行“performSegueWithIdentifier”来触发它。因此,在用户点击调用的方法中,如果您的Segue具有标识符“FrameSegue”,则调用“performSegueWithIdentifier”,如下所示

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

如果您需要先进行任何设置以将数据传递到另一个视图,您可以在“prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender”中设置转换。

我希望有所帮助。

回答下面的评论: -

如果您将Segue标识为“FrameSegue”,并且您希望将视图“MyFirstView”中的字符串传递给名为“MySecondView”的第二个视图,并将其存储在第二个视图中的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];

}

答案 1 :(得分:0)

实现mapView:annotationView:calloutAccessoryControlTapped:方法并将showDetail:实现放在那里,可能会对相关的注释视图进行一些条件测试。