【问题标题】:Passing String Value From Map View to Detail View将字符串值从地图视图传递到详细信息视图
【发布时间】:2011-10-14 21:21:33
【问题描述】:

单击标注按钮后,我试图将字符串变量从地图视图控制器传递到详细视图控制器。我取了标注按钮的标题并将其存储在一个 NSString 对象中(已在 Map View Controller 中合成)。

然后我在详细视图控制器中分配并初始化地图视图控制器,并尝试在新视图控制器中记录该值一次,它返回为空。代码如下:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control
{
    TheLocations *annotationTapped = (TheLocations *)view.annotation;

    NSLog(@"button clicked on annotaion %@", annotationTapped);

    MapViewController *thisMap = (MapViewController *)[[UIApplication sharedApplication] delegate];
    DetailViewController *dvc = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];

    dvc.title = view.annotation.title;
    pinTitle = dvc.title;
    NSLog(@"%@", pinTitle);

    [thisMap switchViews:self.view toView:dvc.view];
}

这会成功记录“pinTitle”的值。 pinTitle 已经创建并合成,所以是这个 Map View 的字符串。

现在,我切换到详细视图,并将这段代码输入到 viewDidLoad 方法中:

MapViewController *mvc = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
    NSLog(@"%@", mvc.pinTitle);

它识别“pinTitle”并允许它注销但返回“(null)”,因此在某处丢失了 pinTitle 的值。切换视图时如何让 pinTitle 保留其价值?非常感谢您的帮助!

【问题讨论】:

    标签: xcode variables nsstring android-mapview


    【解决方案1】:

    在详细视图的viewDidLoad 方法中,您正在创建MapViewController 的新实例,该实例与calloutAccessoryControlTapped 中引用的实例是分开的。

    在那个新的独立实例中,pinTitle 未设置,默认值为 null。

    我不确定为什么无论如何你都需要pinTitle 变量。

    calloutAccessoryControlTapped 中,您正在设置dvc.title,因此在DetailViewControllerviewDidLoad 中,您可以使用self.title 访问该值。你不需要引用MapViewController

    【讨论】:

    • 我认为您想要做的(或真正想做的)是将 pinTitle 添加为 DetailViewController(不是 MapViewController)中的属性。这会比使用 title 更好,因为 UIViewController 的内置 title 属性用作导航工具栏的标题。
    • 哇哦,好的。比我想象的要容易得多。我总是让事情变得比他们需要的更复杂。谢谢,您对我的 Map Kit 帮助很大。
    • 虽然您可以设置标题并将其沿用,但有没有办法处理多个变量(例如“副标题”)。如果有一种更简单的方法可以在地图视图页面上执行多个“标题”,我不想设置一个完整的“pinTitle”类变量。
    • 如果您想将多个字段传递给详细视图,您必须为每个字段创建一个单独的属性,或者只需将整个注释对象定义为单个属性并传递它,以便详细视图将可以访问注释中的所有字段。也可以为细节视图控制器创建一个自定义的初始化方法,这样你就可以在分配+初始化时直接传递字段。
    • 啊,好的,我明白了。所以我所做的是我创建了一个名为“addressString”的 NSString,然后能够设置“dvc.addressString = view.annotation.subtitle”,这就是诀窍。我想我可以为尽可能多的变量做到这一点!
    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 2014-05-23
    • 2010-12-06
    • 2011-04-02
    • 2020-09-21
    • 1970-01-01
    • 2014-08-01
    • 2013-07-29
    相关资源
    最近更新 更多