假设我有一个按钮,我将其添加到mapview中的注释对象:
AnnotationButton* rightButton = [AnnotationButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
您会注意到该按钮在单击时调用函数showDetails
。
显示详细信息定义为- (void)showDetails:(id)sender;
并接收发件人。有没有办法发送更多变量,或关联不同的发件人?原因是我想点击按钮告诉我哪个注释与该按钮相关联。将注释视为在创建按钮的上下文中可用的其他对象。
我想过继承UIButton类,然后在其中存储其他信息,但这看起来像是一个黑客。
有什么想法吗?
答案 0 :(得分:3)
如果此按钮用于MKAnnotationView的rightCalloutAccessoryView
或leftCalloutAccessoryView
,则点击该按钮时,地图的代理人应收到消息mapView:annotationView:calloutAccessoryControlTapped:
。这将为您提供已轻触的MKAnnotationView实例,该实例具有annotation
属性,可为您提供相应的注释。您应该使用它而不是尝试直接在按钮上使用操作。
答案 1 :(得分:2)
不,无法更改发送到操作消息的内容。你可以要求两个参数,但它们将是按钮和触发它的事件。为了得到你想要的东西,你有两个选择(我现在可以想到)。
tag
属性。您可以为每个按钮指定一个唯一标记,用于标识注释,例如数组中注释的索引。然后,您可以轻松地在showDetails:
方法中获取注释。id
类型并为其指定通用名称,例如representedObject
,则您将来也可以在其他项目中使用它。