-1

如何将(id)发件人添加到以下代码?

- (IBAction) gobutton: (UIButton *) button5 {

我尝试的一切都失败了,任何帮助将不胜感激。谢谢。

编辑:我需要在 (IBAction) 中保留 (UIButton *) 按钮 5 引用

4

6 回答 6

5

如果我没记错的话,如果你以我认为的方式使用它,

- (IBAction) gobutton: (id) sender {
if(sender == button5)
   //do something...
else
   //do something else...
}

假设您将 button5 指定为参数,以指示此操作响应 button5 被按下而执行。

于 2010-01-12T04:15:35.827 回答
3

好的,首先....IBAction除了对 Interface Builder 而言,它并没有什么特别的意义。基本上:

#define IBAction void

所以每当你看到时IBAction,想着“虚空”。它存在的唯一原因是作为一个标志来告诉 Interface Builder 方法是连接控制操作的有效方法。Objective-C 编译器不需要知道它,因此它被定义为 void,因为所有“动作”方法都返回 void。

其次,动作方法也有一个参数,它可以是任意数量类型的对象。因此,动作方法应该使用类型id作为其参数的类型。这样就可以将指针传递给任何 Objective-C 对象,而不会导致编译器产生类型检查错误。

所以通常动作应该是这样的:

- (IBAction)myAction:(id)sender {
    if (sender == self.someButton) {
        UIButton *button = (UIButton *)sender;
        ...
        return;
    } else if (sender == self.someControl) {
        UIControl *control = (UIControl *)sender;
        ...
        return;
    }
}

换句话说,anid几乎就像一个无类型指针void *,当某个函数需要一个指向未知类型的指针时,它通常在 C 中使用。sender可能是不同类型的控件,因此id使用通用的东西,然后一旦代码知道它是什么,发送者就会被转换为更具体的东西。

无论如何,绝对没有理由将某些东西定义为具有返回类型,IBAction除非您打算将该方法用作 Interface Builder 中的目标操作。在您的应用程序委托中拥有 IBAction 似乎有点不寻常......

于 2010-01-12T06:01:55.613 回答
2

目前尚不清楚您要做什么,但大多数操作看起来像:

- (IBAction) gobutton: (id)sender;
于 2010-01-12T04:06:35.143 回答
1

动作的第一个参数始终是发送者(您可以根据需要指定类型和名称)。

如果方法是按钮的操作,那么第一个参数将是按钮。如果该方法是多个按钮的操作,那么第一个参数将允许您确定点击了哪个按钮(如 Leper 所述)。

你真正想解决什么问题?
有一些技术可以将信息传递给操作方法。例如,如果您有一个显示在表格视图单元格上的按钮,并对每个单元格执行相同的操作,那么在 action 方法中,您可能希望能够确定点击了哪个单元格的按钮。

于 2010-01-12T04:25:06.697 回答
0

如何在用户触摸控件之前获取发件人的 ID?

找到了!设置标签并使用 viewWithTag。

于 2010-04-06T17:04:34.023 回答
-3

你能创建一个包含 UIButton 和发送者的简单结构并使用它吗?

结构 myObject { UIButton* button5; 身份证发件人;}

...或者,您可以创建自己的 NSObject(可能更可可):

@instance myObject : NSObject { ... }

于 2010-01-12T04:15:47.700 回答