【问题标题】:How do I pass both latitude and longitude coordinates on button press and drop a pin on next map view (between three views)?如何在按下按钮时同时传递纬度和经度坐标并在下一个地图视图(三个视图之间)放置一个图钉?
【发布时间】:2012-10-07 17:20:48
【问题描述】:

我正在为一些让我坚持数小时甚至数天的事情而苦苦挣扎。如果有人可以提供意见,那就太棒了。我想出了如何将数据从按钮按下传递到另一个视图,但我现在要做的是将经度和纬度坐标作为 NSString 发送到下一个视图。这可以作为 NSString 吗?

我现在意识到它不起作用,因为我已经将 CLLocationCoordinate2D 与“位置”相关联,但我现在还能做什么?

这是我的代码:

if ([mlabel.text isEqualToString: @" Arts "])

   {
         CLLocationCoordinate2D location;
         location.latitude = (double) 44.4758;
         location.longitude = (double) -73.2125;

         viewController.stringToDisplay = location;

   }

【问题讨论】:

  • 为什么不直接传坐标呢?

标签: xcode xcode4 nsstring xcode4.2 cllocation


【解决方案1】:

在我的应用程序中,我声明了 MapView 所在的 UIViewController 的属性:

@property (nonatomic) double latitude;
@property (nonatomic) double longitude;

您可以处理此属性,或制作自定义方法将地图移动到您的位置。 或者你可以通过传递 [str doubleValue] 将 NSString 转换为 double,其中 str 是 NSString。

【讨论】:

  • 谢谢安德烈。 @Jrturton:我将如何只传递坐标?这就是我想做的(尝试在这里采取最简单的方法)。 “坐标”本身是行不通的,不是吗?我知道当我尝试返回 CLLocationCoordinate2D 值时它不起作用,因为它被分配给“位置”。如您所知,我是这里的菜鸟 :)
【解决方案2】:

在我发布这个问题之后,我实施了一个额外的视图,总共 3 个,所以我最初的问题是不同的。到目前为止,我最初的观点有一个叫做艺术的类别。通过以下方式达到艺术视图:

我的第一个视图,例如,使用下面打开我的“艺术”视图。

-(void)mainButton
{
  if ([mlabel.text isEqualToString: @" Arts " ])
  {
    [self performSegueWithIdentifier:@"Arts" sender:self];
  }
}

一旦在我的艺术视图中,我的艺术场地的坐标就会放在我的第三个视图(地图)中,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  FlipsideViewController *viewController = segue.destinationViewController;
  viewController.delegate = self;

  NSString *str;

     if ([[segue identifier] isEqualToString:@"showAlternate"]) 
     {
      [[segue destinationViewController] setDelegate:self];
     }

     if ([mlabel.text isEqualToString: @" Burlington City Arts "])     
     {
      CLLocationCoordinate2D location;
      location.latitude = (double) 44.476625;
      location.longitude = (double) -73.212827;

      str = [NSString stringWithFormat:@"%.2f, %.2f", location.latitude, location.longitude];

      viewController.stringToDisplay = str;
     }
}

上面代码中发生的事情是我声明 stringToDisplay 来存储坐标并将其发送到第三个视图。我使用标签并说如果我的pickerview标签等于短语“Burlington City Arts”,那么通过我的“str”NSString将坐标从那个特定的地方发送到我的第三个视图。

最后,我想在该位置放置图钉的第三个视图的代码:

if ([self.stringToDisplay isEqualToString: @"44.48, -73.21"])

{
    location.latitude = (double) 44.476625;
    location.longitude = (double) -73.212827;

    MapViewAnnotation *newAnnotation = [[MapViewAnnotation alloc] initWithTitle:@"newAnnotation" andCoordinate:location];
    [self.mapView addAnnotation:newAnnotation];
    [mapView setCenterCoordinate:location animated:YES];
}

我的 stringToDisplay 在上面的代码中将带有坐标的 str NSString 传输到地图视图(第三个视图),但是,这些值是四舍五入的,所以我所做的就是将四舍五入的数字放入我的 IF 语句中。之后,我再次指定了要放置的别针的确切坐标。哒哒!

*****UPDATE*****

与其在视图 2 和 3 中重复坐标,我现在意识到最好的方法是重新声明每个场地的标签,并将该标签名称传递给第三个视图,这样就不会与坐标混淆。这些坐标在第三个地图视图中只指定一次,这很好。我在 stringToDisplay 字符串中传递标签名称,如下所示:

if ([mlabel.text isEqualToString: @" The S.P.A.C.E. Gallery "])
        {
            viewController.stringToDisplay = @" The S.P.A.C.E. Gallery ";

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多