xcode objective-c ibaction添加
新手一枚,添加IBACTION的时候,无论是UIbutton还是UIbaritem,在type里面选了类型,但是添加之后仍然为id,不知道这是怎么回事.另外发现如果类型是...
新手一枚,添加IBACTION的时候,无论是UIbutton还是UIbaritem ,在type里面选了类型,但是添加之后仍然为id,不知道这是怎么回事.
另外发现如果类型是id的话,用它的属性,比如sender.text或sender.tilte,xcode会提示这个对象没有找到这个属性,但是如果type选uibutton或者uibaritem就可以直接用sender加属性,求解为什么 展开
另外发现如果类型是id的话,用它的属性,比如sender.text或sender.tilte,xcode会提示这个对象没有找到这个属性,但是如果type选uibutton或者uibaritem就可以直接用sender加属性,求解为什么 展开
3个回答
展开全部
楼主忽略了id 的本质,
它是无类型的指针, 可以想像成C语言里的 void *
既然是无类型的, 那么在需要的地方, 只要在其变量前面加一个类型转换就好了.
比如一个UIButton的action事件方法名为:
- (void)actionMe:(id)sender
那么在方法体里,为了得到相关的UIButton的操作,
你只要
UIButton* btn = (UIButton*)sender;
这样就可以对这个参数进行操作了.
第二个问题, 就是在构建action方法时, 那个sender参数本来是可有可无的.
比如你可以定义一个这样的响应方法
- (void)actionGo;
同时对于那个后面的sender参数,你是可以指定参数类型的, 就像你上面例举的一些.
但是如果用XCode的工具自动生成的话, 它可能会直接用id去表示 ,
原因就是上面讲的, 所有的UIKit对象指针都可以用id 来表示 ,
反过来说 , 就是id 可以通过类型转换来表达你本来的对象类型.
gl
它是无类型的指针, 可以想像成C语言里的 void *
既然是无类型的, 那么在需要的地方, 只要在其变量前面加一个类型转换就好了.
比如一个UIButton的action事件方法名为:
- (void)actionMe:(id)sender
那么在方法体里,为了得到相关的UIButton的操作,
你只要
UIButton* btn = (UIButton*)sender;
这样就可以对这个参数进行操作了.
第二个问题, 就是在构建action方法时, 那个sender参数本来是可有可无的.
比如你可以定义一个这样的响应方法
- (void)actionGo;
同时对于那个后面的sender参数,你是可以指定参数类型的, 就像你上面例举的一些.
但是如果用XCode的工具自动生成的话, 它可能会直接用id去表示 ,
原因就是上面讲的, 所有的UIKit对象指针都可以用id 来表示 ,
反过来说 , 就是id 可以通过类型转换来表达你本来的对象类型.
gl
追问
你回答我非常满意,但是我就是好奇为什么我xcode里面,拖出来,自己手选了type,但最后生成的还是id类,我看视频中老师操作的没问题啊。
追答
这个问题, 可以归结为xcode本身的问题吧.
毕竟, xcode经常crash
展开全部
id你可以理解为NSObject的指针,也就是所有类的父类的指针,所以他可以指向任何对象。
.text,.tilte,这些都是UIbutton和UIbaritem才有的属性,用id类型的指针去调当然会有警告,因为id类型的对象没有这个属性(虽然会有警告,但是如果指向的确实是一个buton的话,运行也不会出错)。
最简单的解决办法就是强制转换:
- (void)buttonClick:(id)sender{
UIButton *button = (UIButton *)sender;
.......
}
或者直接写成
- (void)buttonClick:(UIButton *)sender{
......
}
.text,.tilte,这些都是UIbutton和UIbaritem才有的属性,用id类型的指针去调当然会有警告,因为id类型的对象没有这个属性(虽然会有警告,但是如果指向的确实是一个buton的话,运行也不会出错)。
最简单的解决办法就是强制转换:
- (void)buttonClick:(id)sender{
UIButton *button = (UIButton *)sender;
.......
}
或者直接写成
- (void)buttonClick:(UIButton *)sender{
......
}
追问
你的回答也很好,但是人家先回答的。就给他了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
type是button的样式而已
在xib中有没有关联所有的button或baritem
没有关联上肯定找不到该对象
在xib中有没有关联所有的button或baritem
没有关联上肯定找不到该对象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询