0

可能重复:
目标 C:什么是“(id)发件人”?

我对以下问题有一些疑问:

- (IBAction)leftButtonPressed:(id)sender 
{
     UIButton *button = (UIButton*)sender;
     _label.text = button.titleLabel.text;
}

具体是(UIButton)*sender做什么的?我的意思是特别是带有 *. 是不是类似的东西UIButton *myButton

据我了解,它是某种指向被按下按钮的指针,但这是为什么呢?为什么我不能写

_label.text = sender.titleLabel.text;

因为它“是”按钮?我怎么知道可以发送什么?我的意思是我可以写这样的东西:

-(void)leftButtonPressed:(color)sender {...}

为了传递按钮的颜色?

4

3 回答 3

2

(UIButton *)sender这是将您的类型转换id sender为 UIButton。

是的,你可以写-(void)leftButtonPressed:(color)sender {...}但是颜色应该是一个有效的类类型,它应该是指针-(void)leftButtonPressed:(NSColor *)sender {...}

于 2012-12-14T11:52:09.717 回答
1

有时你会收到类似“ incompatible pointer type ....”或“ incompatible conversion..”等警告......这些是由于类型转换中的错误而发生的......(id)这种类型的施法者可以处理类型转换(这里是按钮操作)......我希望你明白我的意思.

于 2012-12-14T12:00:03.133 回答
1

你不能写

_label.text = sender.titleLabel.text;

因为 sender 是 id 类型,并且 id 对象没有任何作为 titleLabel 的属性,所以您必须首先键入 cast sender,以便编译器知道这是一个 UIButton 类型的对象,它具有名为 titleLabel 的属性。

现在,如果您想直接使用 sender 那么您必须确保该方法仅在按钮单击事件时触发,然后按如下方式更改您的方法

- (IBAction)leftButtonPressed:(UIButton *)sender 

那么你可以直接使用

    _label.text = sender.titleLabel.text;
于 2012-12-14T12:09:23.177 回答