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

时间:2011-01-27 06:42:38

标签: iphone objective-c ios declaration ibaction

他们在哪里说IBAction是什么,但不解释整个宣言的含义。

什么是发件人和身份证?

此致 Namratha

4 个答案:

答案 0 :(得分:5)

  1. 根据我的知识IBAction,只是暗示void

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

  3. sender,此处

    • 是一个以人为命的参数名称(您可以将其命名)
    • 它引用调用方法changeGreeting:
    • 的对象
  4. 示例:

    让我们假设方法changeGreeting:ClassA中定义,其内容如下:

    - (IBAction)changeGreeting:(id)sender {
    
        [sender setText:@"Hello %@", [sender class]];
    
        // Nothing can be returned from this method
    }
    

    考虑一下Class 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被称为发件人,因为他们调用方法changeGreeting:objOfClassA被称为接收器,因为此处objOfClassA's changeGreeting:方法称为

    当用户触及aLabelaTextField时,他们的text将分别更改为Hello UILabelHello UITextField

    另一种方式:  我们也可以从changeGreeting:调用objOfClassA Class B方法,如下所示。

    [objOfClassA changeGreeting:aLabel];
    [objOfClassA changeGreeting:aTextField];
    

    由于上述代码不言自明,objOfClassA接收器。但是aLabel& aTextField不是发件人。因为他们没有调用该方法。在这里,他们只是争论。实际发件人为Class B,但aLabelaTextField在参数(id)sender中传递。无论哪种方式,方法执行的结果都是相同的。

答案 1 :(得分:2)

也许您应该查看Objective-C教程(such as this),因为这是非常基础的。

IBAction被定义为“void”,因此它意味着该方法没有返回值。它仅对Interface Builder有用,因此它知道您的哪些方法实际上是您可以链接的操作。

(id)发件人部分是您方法的唯一参数,名为sender。 (id)表示参数的类型可以是任何对象:

来自Objective-C FAQ

  

什么是id?
  它是Objective-C用于任意对象的通用C类型。 [...]

答案 2 :(得分:1)

IBAction是Interface Builder在源代码中查找的关键字(#define'到void),如果它将其作为返回类型找到,则会添加它在可能的行为列表中,您可以将IB元素连接到。

id是Objective-C中的通用对象类型,表示任何 Objective-C对象。

sender只是id - 类型参数的名称。

答案 3 :(得分:1)

功能上说:IBAction是一个关键字,用于标识可以通过Interface Builder链接到的方法。 (id)如果对多个控件使用相同的方法,发件人必须识别对象是否触发该方法。