Ios 导致撞车的按钮

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:[

我这里有点问题。我已经创建了一个按钮,希望它在被点击时改变它的背景图像。它不起作用了,我犯了一个SIGABRT错误

代码如下:

- (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];
        }
}