Ios 导致撞车的按钮
我这里有点问题。我已经创建了一个按钮,希望它在被点击时改变它的背景图像。它不起作用了,我犯了一个SIGABRT错误 代码如下:Ios 导致撞车的按钮,ios,objective-c,uibutton,Ios,Objective C,Uibutton,我这里有点问题。我已经创建了一个按钮,希望它在被点击时改变它的背景图像。它不起作用了,我犯了一个SIGABRT错误 代码如下: - (IBAction)indicatedButton:(id)sender { if ([sender isSelected]) { [sender setBackgroundImage:[UIImage imageNamed:@"completeTickBox.png"]]; } else { [sender setBackgroundImage:[
- (IBAction)indicatedButton:(id)sender
{
if ([sender isSelected])
{
[sender setBackgroundImage:[UIImage imageNamed:@"completeTickBox.png"]];
}
else
{
[sender setBackgroundImage:[UIImage imageNamed:@"blankTickBox.png"]];
}
}我想你想要:
[sender setBackgroundImage:[UIImage ....] forState:UIControlStateNormal];
以下是有关该方法的相关Apple文档:
因此,在您的情况下,它将是:
- (IBAction)indicatedButton:(id)sender
{
if ([sender isSelected])
{
[sender setBackgroundImage:[UIImage imageNamed:@"completeTickBox.png"] forState:UIControlStateNormal];
}
else
{
[sender setBackgroundImage:[UIImage imageNamed:@"blankTickBox.png"] forState:UIControlStateNormal];
}
}
这里假设“sender”实际上是一个UIButton。您必须将sender强制转换为UIButton,因为sender是(id),而您想要的对象是UIButton 把这一行放在你的代码中
UIButton*btn=sender代码>
- (IBAction)indicatedButton:(id)sender
{
UIButton *btn= sender;
if ([btn isSelected])
{
[btn setBackgroundImage:[UIImage imageNamed:@"completeTickBox.png"] forState:UIControlStateNormal];
}
else
{
[btn setBackgroundImage:[UIImage imageNamed:@"blankTickBox.png"] forState:UIControlStateNormal];
}
}
首先验证您是否得到了一个UIButton
-(IBAction indicatedButton:(id)sender
{
if ([sender isKindOfClass:[UIButton class]])
{
}
}
约定提示:对象属性的最佳实践是使用点表示法(isSelected是UIButton的BOOL属性)
如果你只是使用一个普通的按钮,但是你想要的是一个“切换”按钮(它是一个图像,或者是一个不同的图像),那么你需要为按钮设置selected state属性,这样它就知道它在被触摸后被选中了(反之亦然,如果它没有)
如果您知道要使用按钮,那么也可以将按钮发送者类型从id更改为UIButton,而不是使用内省(检查类类型)。您无需将按钮重新连接到情节提要/笔尖即可完成此操作
-(IBAction indicatedButton:(UIButton *)sender
{
if (sender.isSelected)
{
[sender setSelected:NO]; // if we were selected, we won't be now
UIImage *buttonImage = [UIImage imageNamed:@"completeTickBox.png"];
[sender setImage:buttonImage forState:UIControlStateNormal];
}
else if (!sender.isSelected)
{
[sender setSelected:YES]; // if we aren't selected, we will be now
UIImage *buttonImage = [UIImage imageNamed:@"blankTickBox.png"];
[sender setImage:buttonImage forState:UIControlStateNormal];
}
}
仅供参考:当您键入sender而不是允许其为泛型类型时,这种问题会变得很明显:indicatedButton:(UIButton*)sender
,例如,此处。
-(IBAction indicatedButton:(id)sender
{
if ([sender isKindOfClass:[UIButton class]])
{
if (sender.isSelected)
{
[sender setSelected:NO]; // if we were selected, we won't be now
UIImage *buttonImage = [UIImage imageNamed:@"completeTickBox.png"];
[sender setImage:buttonImage forState:UIControlStateNormal];
}
else if (!sender.isSelected)
{
[sender setSelected:YES]; // if we aren't selected, we will be now
UIImage *buttonImage = [UIImage imageNamed:@"blankTickBox.png"];
[sender setImage:buttonImage forState:UIControlStateNormal];
}
}
}
-(IBAction indicatedButton:(UIButton *)sender
{
if (sender.isSelected)
{
[sender setSelected:NO]; // if we were selected, we won't be now
UIImage *buttonImage = [UIImage imageNamed:@"completeTickBox.png"];
[sender setImage:buttonImage forState:UIControlStateNormal];
}
else if (!sender.isSelected)
{
[sender setSelected:YES]; // if we aren't selected, we will be now
UIImage *buttonImage = [UIImage imageNamed:@"blankTickBox.png"];
[sender setImage:buttonImage forState:UIControlStateNormal];
}
}