0

好的,非常快速的问题。我正在使用 MKMapAnnotation 向我的 iOS 添加注释。我创建了一个 int 和一个带有公开按钮的注释,该按钮调用方法 loadPano,如下所示:

int integervariable;
[disclosureButton addTarget:self 
                     action:@selector(loadPano) 
           forControlEvents:UIControlEventTouchUpInside];    

现在说我想访问方法 load pano 中的整数变量,我将如何做到这一点,我正在努力理解如何在像上面那样调用新方法时将变量传递给新方法。

4

4 回答 4

1

如果您只需要传递与每个公开按钮关联的整数,则可以设置disclosurebutton.tag = integer value;.

在标签中传递数据有点笨拙,但在简单的情况下它可以工作。

同样为此工作,请以loadpano这种方式声明:

- (void)loadPano:(UIButton*)sender
{
    NSInteger relevantInteger = sender.tag;
   // More code here
}

并像这样设置目标:

[disclosureButton addTarget:self 
                     action:@selector(loadPano:) 
           forControlEvents:UIControlEventTouchUpInside];    

请注意,该方法现在需要一个参数,因此选择器包含一个冒号。

于 2013-03-01T17:13:48.477 回答
1

有几种解决方案:

  1. 使用标签。但这只能是整数。
  2. 将实例变量(可能使用属性访问)添加到按钮的类。这意味着您必须为按钮创建一个自定义类。
  3. 最通用:使用关联对象(也称为关联引用),使用运行时函数objc_setAssociatedObject()objc_getAssociatedObject()
于 2013-03-01T22:27:43.087 回答
0

您不能在 target-action 方法中传递除 sender 和 eventType 以外的值。

动作消息可以可选地包括作为参数的发送者和事件,以该顺序。

如果该 integerVariable 是一个常量,那么您可以将其设置为您从中启动该操作的控件的标记(在您的情况下是公开按钮)。

或者

您可以在类中获取一个实例变量,并在 loadPano 方法中访问该值。

于 2013-03-01T17:20:40.353 回答
-1

在一般情况下,您可以NSInvocation使用您的目标、选择器和它需要的任何参数创建一个实例。然后调用调用的-invoke方法将消息发送到目标。

于 2013-03-01T17:21:35.737 回答