到处都在说 IBAction 是什么,但没有解释整个声明的含义。
发件人和ID是什么?
问候, 南拉他
最佳答案
据我所知,
IBAction
只是意味着void
id
是通用的 C 类型,它接受任何类型/类的对象。有点类似于C
中的void pointer。我们可以使用id
作为方法的参数,以防不同类的对象访问该方法。发件人
,这里,- 是一个人为命名的参数名(你可以给它起任何名字)
- 它引用调用方法
changeGreeting:
的对象
一个例子:
假设方法 changeGreeting:
定义在 ClassA
中,其内容如下所示。
- (IBAction)changeGreeting:(id)sender {
[sender setText:@"Hello %@", [sender class]];
// Nothing can be returned from this method
}
并考虑我们在 B 类
中有以下几行。
// LINE 1
[aLabel addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
// LINE 2
[aTextField addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
在第 1 行中,aLabel
是发送者,objOfClassA
是接收者。在第 2 行中:aTextField
是发送者,objOfClassA
是接收者。这里aLabel
和aTextField
被称为senders 因为它们正在调用 方法changeGreeting:
.而 objOfClassA
被称为 receiver 因为 objOfClassA
changeGreeting:
方法在这里被调用。
当用户触摸 aLabel
或 aTextField
时,他们的 text
将更改为 Hello UILabel
或Hello UITextField
分别。
另一种方式:
我们还可以从 Class B
调用 changeGreeting:
方法 objOfClassA
,如下所示。
[objOfClassA changeGreeting:aLabel];
[objOfClassA changeGreeting:aTextField];
由于上面的代码是不言自明的,objOfClassA
是接收者。但是 aLabel
和 aTextField
不是发送者。因为他们没有调用该方法。在这里它们只是参数。这里实际的发送者是 Class B
,但是 aLabel
和 aTextField
是在参数 (id)sender
中传递的。无论哪种方式,方法执行的结果都是相同的。
关于iphone - 声明说明 - (IBAction)changeGreeting :(id)sender; iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813491/