如何将(id)发件人添加到以下代码?
- (IBAction) gobutton: (UIButton *) button5 {
我尝试的一切都失败了,任何帮助将不胜感激。谢谢。
编辑:我需要在 (IBAction) 中保留 (UIButton *) 按钮 5 引用
如何将(id)发件人添加到以下代码?
- (IBAction) gobutton: (UIButton *) button5 {
我尝试的一切都失败了,任何帮助将不胜感激。谢谢。
编辑:我需要在 (IBAction) 中保留 (UIButton *) 按钮 5 引用
如果我没记错的话,如果你以我认为的方式使用它,
- (IBAction) gobutton: (id) sender {
if(sender == button5)
//do something...
else
//do something else...
}
假设您将 button5 指定为参数,以指示此操作响应 button5 被按下而执行。
好的,首先....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 似乎有点不寻常......
目前尚不清楚您要做什么,但大多数操作看起来像:
- (IBAction) gobutton: (id)sender;
动作的第一个参数始终是发送者(您可以根据需要指定类型和名称)。
如果方法是按钮的操作,那么第一个参数将是按钮。如果该方法是多个按钮的操作,那么第一个参数将允许您确定点击了哪个按钮(如 Leper 所述)。
你真正想解决什么问题?
有一些技术可以将信息传递给操作方法。例如,如果您有一个显示在表格视图单元格上的按钮,并对每个单元格执行相同的操作,那么在 action 方法中,您可能希望能够确定点击了哪个单元格的按钮。
如何在用户触摸控件之前获取发件人的 ID?
找到了!设置标签并使用 viewWithTag。
你能创建一个包含 UIButton 和发送者的简单结构并使用它吗?
结构 myObject { UIButton* button5; 身份证发件人;}
...或者,您可以创建自己的 NSObject(可能更可可):
@instance myObject : NSObject { ... }