简体   繁体   English

UIButton 背景图片 点击更改

[英]UIButton Background image Change on Click

I have a tableView showing some controls.Like options for the correct ans in UIButton.I want to change the buttons background image in the correct ans and the wrong ans in the click event.how can i do this?Can any one give me a idea?我有一个 tableView 显示一些控件。就像 UIButton 中正确 ans 的选项一样。我想在点击事件中更改正确 ans 中的按钮背景图像和错误 ans。我该怎么做?谁能给我一个主意? i am trying to change the background image as:我正在尝试将背景图像更改为:

 [cell.ansBtn2 setImage:[UIImage imageNamed:@"option_red.png"]  forState:UIControlStateSelected];

and i have set the backgound as:我将背景设置为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

     static NSString *CellIdentifier = @"BeginingCell";

     cell=(BeginingCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    if (cell == nil) {

               NSArray *topLevelObjects=[[NSBundle mainBundle] loadNibNamed:@"BeginingCell" owner:self options:nil ];

        for(id CurrentObject in topLevelObjects)
        {
            if ([CurrentObject isKindOfClass:[BeginingCell class]]) {

                cell=(BeginingCell *) CurrentObject;
                cell.selectionStyle = UITableViewCellSelectionStyleNone;


                break;
            }
        }

    }


    if(indexPath.row==0)
    {


                imageURL=[dictionary objectForKey:@"questionImage"];

        NSURL *url = [NSURL URLWithString:imageURL];
        NSData *data = [NSData dataWithContentsOfURL:(NSURL *)url];
        UIImage *img = [[UIImage alloc]  initWithData:data];



        cell.lblScoreCurrent.text=[NSString stringWithFormat:@"%d", reloader];

        cell.lblScore.text=@"/30";
        cell.myImageView.image = img;
        cell.SectionTitle.text=[dictionary objectForKey:@"question"];




        cell.ansBtn1.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.ansBtn2.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.ansBtn3.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.ansBtn4.titleLabel.lineBreakMode = UILineBreakModeWordWrap;



        cell.ansBtn1.titleLabel.textAlignment = UITextAlignmentCenter;
        cell.ansBtn2.titleLabel.textAlignment = UITextAlignmentCenter;
        cell.ansBtn3.titleLabel.textAlignment = UITextAlignmentCenter;
        cell.ansBtn4.titleLabel.textAlignment = UITextAlignmentCenter;


        [cell.ansBtn1 setTitle:[dictionary objectForKey:@"option1"] forState:UIControlStateNormal];
        [cell.ansBtn2 setTitle:[dictionary objectForKey:@"option2"] forState:UIControlStateNormal];
        [cell.ansBtn3 setTitle:[dictionary objectForKey:@"option3"] forState:UIControlStateNormal];
        [cell.ansBtn4 setTitle:[dictionary objectForKey:@"option4"] forState:UIControlStateNormal];


        [cell.ansBtn1 addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell.ansBtn2 addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell.ansBtn3 addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell.ansBtn4 addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];



    }


    return cell;

}

And here is the click Event:这是点击事件:

      -(void) btnAction:(id) sender {

NSString *str =((UIButton*)sender).titleLabel.text;

NSLog(@"%@",str);
NSLog(@"%@",[dictionary objectForKey:@"option3"]);

correctAns=[dictionary objectForKey:@"answer"];

if(str==[dictionary objectForKey:@"option1"])
{
    selectedAns=@"1";

    if ([selectedAns compare:correctAns]==NSOrderedSame) 
    {

    [cell.ansBtn1 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateHighlighted];
     NSLog(@"this is correct");

     countCorrect++;
     cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];


    }

    else 
    {

        [cell.ansBtn1 setBackgroundImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateHighlighted];
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];

    }

}

else if(str==[dictionary objectForKey:@"option2"])
{
    selectedAns=@"2";
    if ([selectedAns compare:correctAns]==NSOrderedSame) 
    {
        [cell.ansBtn2 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateHighlighted];
        NSLog(@"this is correct");
        countCorrect++;
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];

    }

    else 
    {
        [cell.ansBtn2 setBackgroundImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateHighlighted];
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];

    }
}


else if(str==[dictionary objectForKey:@"option3"])
{

    selectedAns=@"3";
    NSLog(@"selected ans is %@",selectedAns);
    NSLog(@"correct ans is %@",correctAns);

    if ([selectedAns compare:correctAns]==NSOrderedSame) 
    {
        [cell.ansBtn3 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateHighlighted];
        NSLog(@"this is correct");

        countCorrect++;
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];

    }

    else 
    {
        [cell.ansBtn3 setBackgroundImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateHighlighted];
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];

    }

}

else if(str==[dictionary objectForKey:@"option4"])
{

    selectedAns=@"4";
    NSLog(@"selected ans is %@",selectedAns);
    NSLog(@"correct ans is %@",correctAns);

    if ([selectedAns compare:correctAns]==NSOrderedSame) 
    {

        [cell.ansBtn4 setBackgroundImage:[UIImage imageNamed:@"option_green.png"] forState:UIControlStateHighlighted];

        countCorrect++;
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];

    }

    else 
    {
        [cell.ansBtn4 setBackgroundImage:[UIImage imageNamed:@"option_red.png"] forState:UIControlStateHighlighted];
        cell.lblRating.text=[NSString stringWithFormat:@"%i", countCorrect];            

    }

}


else {
    NSLog(@"ERROR");
}


reloader++;

if (reloader>=[QuestionMutableArray count]) {



    NSString *str=[self GetSkill];
    NSString *totalTime=[NSString stringWithFormat:@"%i . %i minutes",7-timeMin,60-timeSecond];
    NSString *str2=[NSString stringWithFormat:@"Game Over :\n Knowlwdge Level : %@  \n Total Correct Answer :%i \n Total Time : %@ \n Total Question Answered : %i \n",str,countCorrect,totalTime,reloader];

    appAlert=[[UIAlertView alloc]initWithTitle:@"Game Over :\n" message:str2 
                                               delegate:self cancelButtonTitle:@"Exit" otherButtonTitles:nil];
    [appAlert addButtonWithTitle:@"PlayAgain"];



    UIImage *alertBoxImage = [UIImage imageNamed:@"first_look.jpg"];

    UIImageView *_backgroundImageView = [[UIImageView alloc] initWithImage:alertBoxImage];

    _backgroundImageView.frame = CGRectMake(0, 0, 282, 220);

    _backgroundImageView.contentMode = UIViewContentModeScaleToFill;

    [appAlert addSubview:_backgroundImageView];

    [appAlert sendSubviewToBack:_backgroundImageView]; 


    [appAlert show];        
    [dictionary release];
    [QuestionMutableArray release];
    countCorrect=0;


}
else {

    dictionary=[QuestionMutableArray objectAtIndex:reloader];
    [self.tableView reloadData];
}

}

problem is when i am clicking a button for the first time the background is not changing.but in the next click i am getting the change according to the change logic set(i mean green/red change)...what should i do in this case.What is the solution?问题是当我第一次单击按钮时,背景没有改变。但是在下一次单击时,我将根据更改逻辑集进行更改(我的意思是绿色/红色更改)...我应该怎么做这种情况。有什么解决办法?

More Edit:更多编辑:
Don't use == to check if the strings are equal or not, instead use isEqualToString: or compare: function不要使用==检查字符串是否相等,而是使用 isEqualToString: 或比较: function

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

you can do你可以做

if([string1 compare:string2] == NSOrderedSame)
{
    //Do something...
}

because == will check 2 pointers address in memory location and not the contents of those pointers.因为==将检查 memory 位置中的 2 个指针地址,而不是这些指针的内容。

OLD老的

You can use您可以使用

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/occ/instm/UIButton/setBackgroundImage:forState : http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/occ/instm/UIButton/setBackgroundImage:forState

or或者

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/occ/instm/UIButton/setImage:forState : http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html#//apple_ref/occ/instm/UIButton/setImage:forState

If you are showing ans as title label of button, then you have to use setBackgroundImage:forState:如果您将 ans 显示为按钮的标题 label,那么您必须使用setBackgroundImage:forState:

Edit编辑
instead of代替

 [cell.ansBtn2 setImage:[UIImage imageNamed:@"option_red.png"]  forState:UIControlStateSelected];

you should use你应该使用

 [cell.ansBtn2 setBackgroundImage:[UIImage imageNamed:@"option_red.png"]  forState:UIControlStateSelected];

cause you also have to show your ans as title label of that button.因为您还必须将您的 ans 显示为该按钮的标题 label。

Add target methods in your UIbutton.在 UIbutton 中添加目标方法。 Define it -(IBAction)btnClick:(id)sender.定义它-(IBAction)btnClick:(id)sender。 Then create button from sender object in the this method so whenever we click on button, we will get the sender object and change it background image using setBackgroundImage method of button.然后在此方法中从发送方 object 创建按钮,因此每当我们单击按钮时,我们将获取发送方 object 并使用按钮的 setBackgroundImage 方法更改其背景图像。 This may help you.这可能会对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM