0

我有带有多重注释的地图,我希望用户点击 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];
}

...
4

2 回答 2

2

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

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

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

我希望这会有所帮助。

在下面回答您的评论:-

如果您有一个标识为“FrameSegue”的 Segue,并且您想将一个字符串从视图“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];

}
于 2012-05-31T13:00:17.367 回答
0

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

于 2012-05-31T13:06:20.350 回答