声明解释 - (IBAction)changeGreeting:(id)sender; 苹果手机

Nam*_*tha 0 iphone declaration objective-c ibaction ios

他们在哪里说IBAction是什么,但不解释整个声明的含义.

什么是发件人和身份证?

此致,Namratha

Emp*_*ack 5

  1. 据我所知,IBAction只是暗示void

  2. id是一种通用的C类型,它接受任何类型/类的对象.它是一些类似于void指针的东西C.我们可以使用id作为方法的参数,以防不同种类的对象访问该方法.

  3. sender, 这里,

    • 是一个人为命名的参数名称(您可以将其命名为任何名称)
    • 它指的是调用该方法的对象 changeGreeting:

一个例子:

让我们假设该方法changeGreeting:已定义ClassA,它的内容如下所示.

- (IBAction)changeGreeting:(id)sender {

    [sender setText:@"Hello %@", [sender class]];

    // Nothing can be returned from this method
}
Run Code Online (Sandbox Code Playgroud)

并且考虑我们有以下几行Class B.

// LINE 1
[aLabel addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];

// LINE 2
[aTextField addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

在LINE 1中,aLabel发送方并且objOfClassA接收方.在LINE 2中:aTextField发送者,objOfClassA接收者.这里aLabelaTextField被称为发件人,因为他们正在调用方法changeGreeting:.而objOfClassA被称为接收器,因为objOfClassA's changeGreeting:方法叫做这里.

当用户内部的触摸aLabel或者aTextField,他们text将改为Hello UILabelHello UITextField分别.

另一种方法: 我们也可以调用changeGreeting:的方法objOfClassAClass B像下面这样.

[objOfClassA changeGreeting:aLabel];
[objOfClassA changeGreeting:aTextField];
Run Code Online (Sandbox Code Playgroud)

由于上面的代码是自我解释的,objOfClassA接收者.但是,aLabelaTextField是不是发件人.因为他们没有调用该方法.在这里,他们只是争论.这里实际的发送者Class B,但aLabelaTextField在参数传递(id)sender.无论哪种方式,方法执行的结果都是相同的.