我对以下内容有一些疑问:
- (IBAction)leftButtonPressed:(id)sender
{
UIButton *button = (UIButton*)sender;
_label.text = button.titleLabel.text;
}
(UIButton)*sender
究竟做了什么?我的意思是特别是带有*的(UIButton *)。它与UIButton *myButton
类似吗?
据我所知,它是按下按钮的某种指针,但为什么会这样?为什么我不能写
_label.text = sender.titleLabel.text;
因为它是“按钮”吗?我怎么知道什么可以发送?我的意思是我能写出类似的东西:
-(void)leftButtonPressed:(color)sender {...}
为了传递按钮的颜色?
答案 0 :(得分:2)
(UIButton *)sender
这是将您的id sender
强制转换为UIButton。
是的,您可以写-(void)leftButtonPressed:(color)sender {...}
但颜色应该是有效的类类型,它应该是指针-(void)leftButtonPressed:(NSColor *)sender {...}
答案 1 :(得分:1)
有时会收到类似“incompatible pointer type ....
”或“incompatible conversion..
”等的警告......这些都是由于类型转换中的错误而发生的。(id)
是一种类型的施法者,可以处理类型转换(这里是按钮操作)...我希望你明白我的意思。
答案 2 :(得分:1)
你不能写
_label.text = sender.titleLabel.text;
因为sender的类型为id,而id对象没有任何proerty作为titleLabel,所以你必须先输入cast sender,这样编译器就知道这是一个UIButton类型的对象,它有一个名为titleLabel的属性。
现在,如果您想直接使用发件人,那么您必须确保该方法仅在按钮点击事件中被触发,然后按以下方式更改您的方法
- (IBAction)leftButtonPressed:(UIButton *)sender
然后你可以直接使用
_label.text = sender.titleLabel.text;