iphone - 声明说明 - (IBAction)changeGreeting :(id)sender; iPhone

标签 iphone objective-c ios declaration ibaction

到处都在说 IBAction 是什么,但没有解释整个声明的含义。

发件人和ID是什么?

问候, 南拉他

最佳答案

  1. 据我所知,IBAction 只是意味着 void

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

  3. 发件人,这里,

    • 是一个人为命名的参数名(你可以给它起任何名字)
    • 它引用调用方法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接收者。这里aLabelaTextField 被称为senders 因为它们正在调用 方法changeGreeting: .而 objOfClassA 被称为 receiver 因为 objOfClassA changeGreeting: 方法在这里被调用

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

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

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

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

关于iphone - 声明说明 - (IBAction)changeGreeting :(id)sender; iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813491/

相关文章:

iOS 如何获取 cellForRowAtIndexPath 方法中当前选定的索引路径行?

iphone - 在 iPhone/iPad 中发送一个 http 请求的电池消耗是多少?

ios - iPhone应用程序拒绝17.2 : app requires users sign in with their Facebook accounts

iphone - xpath查询问题

objective-c - 在 iOS 6 上使用自动布局在 ScrollView 中嵌入 ImageView

iphone - UIImagePickerController 不释放它占用的内存

ios - 单元格内的 View 框架在 cellForRowAtIndexPath 中未更改

objective-c - 有什么方法可以使 Finder 无法复制文件资源 fork ?

iphone - 试图找到一种比 RegEX 更快的方法来查找 NSString 中的 URL...有什么想法吗?

ios - 通过覆盖它的指定初始化器从 Storyboard 中获取 UIVIewController