- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我对 Xcode 和 Objective-C 还很陌生。我有几个具有各种属性的 ArtPiece 对象存储在一个数组中。然后我将它们作为 MKAnnotations 添加到 map View 中。我需要做的是发送对它们在单击时来自的数组位置的引用。我相信 MKAnnotations 只有数据成员标题、图像和位置,所以当我从对象创建 MKAnnotation 时,注释不会保留任何其他属性。所以,我的问题是,我如何设法保留对创建注释的对象的数组位置的引用,以便我可以将其发送给其他方法,以便它们可以从数组中检索有关该对象的附加信息以获取详细信息 View 等。有没有办法在注释中存储单个 int 值?我不认为还有其他想法吗?
这是我的 ArtPiece.h:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface ArtPiece : NSObject <MKAnnotation>{
NSString *title;
NSString *artist;
NSString *series;
NSString *description;
NSString *location;
NSString *area;
NSNumber *latitude;
NSNumber *longitude;
UIImage *image;
}
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *artist;
@property (nonatomic, retain) NSString *series;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *location;
@property (nonatomic, retain) NSString *area;
@property (nonatomic, retain) NSNumber *latitude;
@property (nonatomic, retain) NSNumber *longitude;
@property (nonatomic, retain) UIImage *image;
@end
这是 .m:
#import "ArtPiece.h"
#import "FindArtController.h"
#import "ArtPiece.h"
#import <MapKit/MapKit.h>
@implementation ArtPiece
- (NSString *)description{
return [NSString stringWithFormat:@"title: %@",title];
}
@synthesize title, artist, series, description, latitude, longitude, location, area, image;
- (CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D theCoordinate;
theCoordinate.latitude = [self.latitude doubleValue];
theCoordinate.longitude = [self.longitude doubleValue];
return theCoordinate;
}
@end
然后我继续创建该类的对象,设置它们的值,并将它们添加到 AppDelegate 中的数组中。然后,在另一个类中,我使用:
[self.mapView addAnnotations:mainDelegate.mapAnnotations];
将注释添加到 map 。但是,当我尝试在 viewforannotation 方法中设置“艺术家”属性时,我得到“请求成员艺术家不是结构或联合”。
显然,我做这个子类化的事情一定是错的,但我要改变什么?
这是我现在拥有的 viewforannotation 方法。 test.artist... 行不工作。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
MKAnnotationView *test=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"reuse"];
test.image = [UIImage imageNamed:@"pao_pin.png"];
[test setCanShowCallout:YES];
[test setUserInteractionEnabled:YES];
test.rightCalloutAccessoryView =
[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
test.artist = annotation.artist;
return test;
}
那么,我应该:annotation = (ArtPiece *)annotation
简而言之,我的目标是能够存储对该注释中对象的数组位置的引用,以便我可以将其发送给可以访问该对象以获取详细 View 等的其他方法。
最佳答案
在viewForAnnotation
方法,您可以访问您的 ArtPiece
属性,但要避免编译器错误和警告,您需要先转换 annotation
自定义类的参数。 annotation
该方法中的参数只是定义为 id<MKAnnotation>
所以编译器不会知道 ArtPiece 特定的属性(直到你告诉它这是 ArtPiece
的一个实例)。
你需要这样的东西:
ArtPiece *artPiece = (ArtPiece *)annotation;
NSString *artist = artPiece.artist;
编辑:
当按下注释 View 的标注按钮时, map View 调用 calloutAccessoryControlTapped
委托(delegate)方法。此方法通过了 MKAnnotationView
在view
范围。注释对象本身在 annotation
中view
的属性(property)范围。您可以将该对象转换为您的自定义类以访问您的 ArtPiece
属性:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
ArtPiece *artPiece = (ArtPiece *)view.annotation;
NSString *artist = artPiece.artist;
}
换句话说,标注按钮处理程序不需要访问原始数组。它获得对实际 ArtPiece
的引用对象本身。
关于objective-c - 将数据存储在 MKAnnotation 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939223/
我在 MKAnnotation 上有一个标注。标注上的附件应该在点击时更改 MKAnnotationView 的图像。有没有办法改变这个,而无需重新创建 MKAnnotation?我问的原因是我想更改
我正在使用 MKMapview 在我的原生 iPhone 应用程序中显示 map ,并向 map View 添加两个标记。单击注释标记时,我希望显示一个电话号码,然后单击电话号码应该调用该号码。 我怎
我正在开发一个 tvOS 应用程序,我希望能够在注释之间滑动。我将注释存储在字典中,并将字典存储在数组中以备将来使用。我只是为加拿大、美国和墨西哥绘制了三个注释。我希望能够在这些注释之间滑动 Remo
为了在 Swift 中向 mapview 添加注释,我有这段有效的代码,例如: 让 myLocation = CLLocationCoordinate2D(55.55, -77.77) let ann
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
我有一个 MKMapView 查询服务器并在中心更改时显示一组 MKAnnotations 但我遇到重复 MKAnnotations 的问题,因为我阅读并添加了它们。 我正在考虑用 for 查看每个注
我有一个对象列表,每个对象都有标题、名称、描述、纬度、经度和地址。 是否可以将此对象显示为 MKAnnotations?我已经坚持了几个小时了。当我尝试使对象具有 CLLocationCoordina
class Point: NSObject, MKAnnotation { var id: String? var title: String? var coordinate: CLLocationC
在我的应用程序出现问题后,我为 MKMapView 编写了一个测试应用程序。我的问题是我无法在 map 上放置多个图钉。在 viewDidLoad: 方法中使用此代码,应在指定坐标的对角线上显示 10
到目前为止,我已经在一些应用程序中看到了这一点,当用户缩小时,注释会彼此靠得更近,如果它们靠得太近,则会被替换为例如“+5”别针或其他东西。 该怎么做?我认为应该在 regionDidChangeAn
MKAnnotation 有问题。有一个自定义的 pinview 并且在第一次加载时工作正常。去删除引脚,然后重新加载相同的引脚,它们会改变颜色。我从两个不同的数据库中添加引脚并且工作正常。移除并分别
我知道之前有一个关于这个的问题。但是,我觉得有点菜鸟,因为我无法解决它。 尝试此操作时出现错误: MKAnnotation *annotation = [[MKAnnotation alloc] in
我正在尝试将 MKAnnotations 保存到我正在学习的类(class)中的项目的核心数据中。 我查看了 github 上其他学生的代码,他们都采用相同的方法创建自定义 NSManagedObje
我在 map 上显示了几个图钉,就像这样: for (int i = 0; i )annotation { static NSString *identifier = @"CarPin"; if ([
我在我的 map 中使用自定义图标作为注释。大约有 200 个引脚。 在模拟器中,我的 map 看起来像这张图片。 但是,在我的设备中,有一些红点注释靠近我的用户位置。就像下图所示。 我猜这是速度引起
我已经阅读了很多关于 MKAnnotation 的内容以及您需要如何在您的子类中实现 setCoordinate 以及 draggable=TRUE 的顺序使整个 shebang 可拖动。 我的情况是
在我的应用程序中,我正在显示一个 TableView ,其中包含从数据库中搜索用户的结果。现在在该 TableView 中有一个按钮,通过单击该用户可以在 map 中查看所有搜索到的用户的位置。当用户
亲切的问候, 我正在使用下面的代码在 iOS 上显示注释 mkmapview在 map 上点击时。 MKPointAnnotation *aAnnotationPoint = [[MKPointAnn
我有一个 MKMapView,它有一个图钉,按下时会显示注释的标题和副标题。 代码中是否有一种方法可以自动显示此文本,以便用户无需单击它? 如果我有很多图钉,它们是否也能同时出现? 最佳答案 您需要使
我有一个 map View Controller (UIViewController、MKMapView)及其委托(delegate)(HCIResultMapViewController)。 我希望
我是一名优秀的程序员,十分优秀!