簡體   English   中英

如何在Objective-C中重置按鈕的原始背景圖像?

[英]How To reset the original background image of button in Objective-C?

我目前正在開發其他人制作的應用。 我想更改一些內容以查看其工作方式。 目前,您可以選擇一個答案,而不能將其更改為其他內容。 我想改變那個。 我希望用戶能夠在提交答案之前更改答案。 問題是我不知道名稱或在哪里可以找到按鈕的原始圖像。 有沒有辦法將其重置為原始設置? 當前,當您將答案按鈕拖放到正確的答案按鈕上時(我知道它令人困惑。在此應用中,您將帶有圖像的按鈕拖放到答案按鈕上,並且圖像會更改)。 當我嘗試更改答案時,圖像也會更改,但以前的選擇也會保持選中狀態。

(對不起,不知道如何在此處正確發布代碼)

- (void) setDefaultImage
{

    // 1) set all the answer button images to unselcted image
    [Ans11 setBackgroundImage:[UIImage imageNamed:@""]         forState:UIControlStateNormal];
    [Ans12 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans13 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans14 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans21 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans22 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans23 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans24 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans31 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans32 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans33 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
    [Ans34 setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];

}
- (void) buttonDroppedOnAnAnswer:(UIButton *)droppedButton
{
    if(CGRectIntersectsRect(droppedButton.frame, Ans11.frame))
    {
        [Ans11 setBackgroundImage:[UIImage imageNamed:@"ans2.png"]    forState:UIControlStateNormal];
        //[Ans11 setImage:nil];
    }
    else if(CGRectIntersectsRect(droppedButton.frame, Ans12.frame))
    {
        [Ans12 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
        //[Ans12 setImage:nil];
    }
    else if(CGRectIntersectsRect(droppedButton.frame, Ans13.frame))
    {
        [Ans13 setBackgroundImage:[UIImage imageNamed:@"ans2.png"]    forState:UIControlStateNormal];
        //[Ans13 setImage:nil];
    }
    else if(CGRectIntersectsRect(droppedButton.frame, Ans14.frame))
    {
        [Ans14 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
        //[Ans14 setImage:nil];
    }
    [droppedButton setUserInteractionEnabled:YES];
}
//Method working when the end of touch is recognized:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self setDefaultImage];
    //Assigning the coordinations of the initial position of but1, but2,   but3, but4:
CGPoint position1;
position1.y=226;
position1.x=974;

CGPoint position2;
position2.y=301;
position2.x=974;

CGPoint position3;
position3.y=377;
position3.x=974;

CGPoint position4;
position4.y=458;
position4.x=974;

self.view.multipleTouchEnabled = NO;

 //Long list of conditions, what will happen if each but will intersect with each picture or each answer:
//if but1 will be dropped on Ans11...
if (CGRectIntersectsRect(but1.frame, Ans11.frame))
{
    [self buttonDroppedOnAnAnswer:but1];
    //...the backgound of Ans11 will change for ans2.png image:
    [Ans11 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    //User interaction is enabled to allow reuse of the button:
    but1.userInteractionEnabled=YES;
}
else if (CGRectIntersectsRect(but1.frame, Ans12.frame))
{
    [self buttonDroppedOnAnAnswer:but1];
    [Ans12 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    //[Ans11 setImage:nil];
    but1.userInteractionEnabled=YES;
}
else if (CGRectIntersectsRect(but1.frame, Ans13.frame))
{
    [self buttonDroppedOnAnAnswer:but1];
    [Ans13 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    but1.userInteractionEnabled=YES;
}
else if (CGRectIntersectsRect(but1.frame, Ans14.frame))
{
    [self buttonDroppedOnAnAnswer:but1];
    [Ans14 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    but1.userInteractionEnabled=YES;
}
else if (CGRectIntersectsRect(but1.frame, Ans21.frame))
{
    [Ans21 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    but1.userInteractionEnabled=YES;
}
else if (CGRectIntersectsRect(but1.frame, Ans22.frame))
{
    [Ans22 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    but1.userInteractionEnabled=YES;
}
else if (CGRectIntersectsRect(but1.frame, Ans23.frame))
{
    [Ans23 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    but1.userInteractionEnabled=YES;
}

編輯:我想出了一種不同的方法來執行此操作。 相反,我添加了另一個可拖動按鈕,該按鈕只是取消了先前的選擇。 這是一種簡單得多的方法,但是可能需要更多重復的代碼行。 非常感謝您的幫助!!

假設將按鈕拖放到任何答案時調用以下方法-

- (void) buttonDroppedOnAnAnswer
{
   // 1) set all the answer button images to unselcted image
   // Suppose we have 4 answer buttons then set
    [Ans11 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
    [Ans12 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
    [Ans13 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
    [Ans14 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];

// check the intersection of button on the answer
// set the intersected answer button image to selected image

   if(CGRectIntersectsRect(but1.frame, Ans11.frame))
   {
      [Ans11 setBackgroundImage:[UIImage imageNamed:@"ans1.png"] forState:UIControlStateNormal];
    //[Ans11 setImage:nil];
      but1.userInteractionEnabled=YES;
   }
   else if(CGRectIntersectsRect(but1.frame, Ans12.frame))
   {
      [Ans12 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    //[Ans12 setImage:nil];
      but1.userInteractionEnabled=YES;
   }
   else if(CGRectIntersectsRect(but1.frame, Ans13.frame))
   {
      [Ans13 setBackgroundImage:[UIImage imageNamed:@"ans3.png"] forState:UIControlStateNormal];
      //[Ans13 setImage:nil];
      but1.userInteractionEnabled=YES;
   }
   else if(CGRectIntersectsRect(but1.frame, Ans14.frame))
   {
      [Ans14 setBackgroundImage:[UIImage imageNamed:@"ans4.png"] forState:UIControlStateNormal];
    //[Ans14 setImage:nil];
      but1.userInteractionEnabled=YES;
   }
}

如果要使用4個不同的按鈕選擇4個答案,則應首先將所有答案按鈕設置為默認圖像(在初始化過程中)。

- (void) setDeafultImagesOnAnswerButtons
{
// 1) set all the answer button images to unselcted image
   // Suppose we have 4 answer buttons then set
    [Ans11 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
    [Ans12 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
    [Ans13 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
    [Ans14 setBackgroundImage:[UIImage imageNamed:@"default.png"] forState:UIControlStateNormal];
}

然后只需檢查答案上放下的按鈕的交點並設置相應的圖像即可,如以下功能所示-

//如果您有多個下拉按鈕,請使用相應的下拉按鈕調用該函數

- (void) buttonDroppedOnAnAnswer:(UIButton *)droppedButton
{
// check the intersection of button on the answer
// set the intersected answer button image to selected image

   if(CGRectIntersectsRect(droppedButton.frame, Ans11.frame))
   {
      [Ans11 setBackgroundImage:[UIImage imageNamed:@"ans1.png"] forState:UIControlStateNormal];
    //[Ans11 setImage:nil];
   }
   else if(CGRectIntersectsRect(droppedButton.frame, Ans12.frame))
   {
      [Ans12 setBackgroundImage:[UIImage imageNamed:@"ans2.png"] forState:UIControlStateNormal];
    //[Ans12 setImage:nil];
   }
   else if(CGRectIntersectsRect(droppedButton.frame, Ans13.frame))
   {
      [Ans13 setBackgroundImage:[UIImage imageNamed:@"ans3.png"] forState:UIControlStateNormal];
      //[Ans13 setImage:nil];
   }
   else if(CGRectIntersectsRect(droppedButton.frame, Ans14.frame))
   {
      [Ans14 setBackgroundImage:[UIImage imageNamed:@"ans4.png"] forState:UIControlStateNormal];
    //[Ans14 setImage:nil];
   }
      [droppedButton setUserInteractionEnabled:YES];
}

UIButton的backgroundImageForState方法返回UIImage

- (UIImage *)backgroundImageForState:(UIControlState)state

您幾乎是這樣描述的:

UIImage *defaultImage = [UIImage imageNamed:@"default.png"];

//假設您最初將按鈕的圖像設置為-

UIButton * answerButton = [UIButton buttonWithType:UIButtonTypeCustom];
[answerButton setImage:defaultImage forState:UIControlStateNormal];

//稍后檢查

if ([answerButton backgroundImageForState:UIControlStateNormal] == defaultImage) {
    // as the answer button background already contains the default image
    // we need not to set the image
}
else
{
    // as the answer button background contains some other image than the  default image so we need to set the default image to button background
UIImage *defaultImage = [UIImage imageNamed:@"default.png"];
[answerButton setImage:defaultImage forState:UIControlStateNormal];
}

根據您的要求,我正在發布代碼-

首先讓我總結一下要求-(如果我在某個地方寫錯了,請及時更新)

在一個視圖中,您需要向用戶顯示問題,該問題將具有多個選擇,並且用戶可以從這些選擇中選擇多個選項。

選項隨按鈕一起顯示,還有一些按鈕用於選擇選項。

將用於選擇應答按鈕的按鈕拖放到相應的應答按鈕上。

最初,所有接聽按鈕將被設置為默認圖像,可拖動按鈕也將被設置為其各自的默認圖像。

當將任何可拖動按鈕放置在任何答案按鈕上時,除應將答案按鈕設置為某些選定圖像外,如果將任何其他可拖動按鈕放置在除相應答案按鈕以外的其他答案按鈕上,則還將也設置為某些選定圖像圖片等,所有的答案按鈕都將被設置為選定的圖像,因為它們被放置在按鈕上。

同樣,如果用戶點擊選定的答案按鈕圖像,則該答案按鈕的圖像將被設置為默認圖像。

例如,我認為有-1)4個可拖動按鈕2)12個接聽按鈕

這4個可拖動按鈕將分別設置為默認圖像,例如dragButImage1.png,dragButImage2.png,dragButImage3.png,dragButImage4.png。 同樣,我們將標簽值1、2、3、4添加到這些按鈕。

同樣,這12個應答按鈕將分別設置為默認圖像,例如ans1.png,ans2.png,ans3.png,ans4.png,ans5.png,ans6.png,ans7.png,ans8.png,ans9 .png,ans10.png,ans11.png,ans12.png。 這些按鈕的標簽值將是1、2、3、4、5、6、7、8、9、10、11、12。

現在是編碼部分

- (void) initializeView
{
// initialize drag-able buttons to default images
    [button1 setTag:1];
    [button1 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"dragButImage%d.png", button1.tag]] forState:UIControlStateNormal];

[button2 setTag:2];
[button2 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"dragButImage%d.png", button2.tag]] forState:UIControlStateNormal];

[button3 setTag:3];
[button3 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"dragButImage%d.png", button3.tag]] forState:UIControlStateNormal];

[button4 setTag:4];
[button4 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"dragButImage%d.png", button4.tag]] forState:UIControlStateNormal];

// initialize anser buttons to default images

[ans1 setTag:1];
[ans1 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans1.tag]] forState:UIControlStateNormal];
[ans1 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans2 setTag:2];
[ans2 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans2.tag]] forState:UIControlStateNormal];
[ans2 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans3 setTag:3];
[ans3 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans3.tag]] forState:UIControlStateNormal];
[ans3 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans4 setTag:4];
[ans4 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans4.tag]] forState:UIControlStateNormal];
[ans4 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans5 setTag:5];
[ans5 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans5.tag]] forState:UIControlStateNormal];
[ans5 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans6 setTag:6];
[ans6 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans6.tag]] forState:UIControlStateNormal];
[ans6 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans7 setTag:7];
[ans7 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans7.tag]] forState:UIControlStateNormal];
[ans7 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans8 setTag:8];
[ans8 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans8.tag]] forState:UIControlStateNormal];
[ans8 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans9 setTag:9];
[ans9 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans9.tag]] forState:UIControlStateNormal];
[ans9 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans10 setTag:10];
[ans10 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans10.tag]] forState:UIControlStateNormal];
[ans10 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans11 setTag:11];
[ans11 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans11.tag]]forState:UIControlStateNormal];
[ans11 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];

[ans12 setTag:12];
[ans12 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", ans12.tag]] forState:UIControlStateNormal];
[ans12 addTarget:self action:@selector(setMyDefaultImage:) forControlEvents:UIControlEventTouchUpInside];
}

//當將可拖動按鈕放在答案上時,將調用以下函數

- (void) aButton:(UIButton *)droppedButton droppedOnAnswer:(UIButton *)answerButton
{
// set the answer button image to selected image
          [answerButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ansSelectedImage%d.png", answerButton.tag]] forState:UIControlStateNormal];

// you could also set the drag-able button image to selected image same as above
[droppedButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"droppedButtonSelectedImage%d.png", droppedButton.tag]] forState:UIControlStateNormal];
}

//觸摸任何答案按鈕時調用// //此方法將設置觸摸的答案按鈕的默認圖像

-(void) setMyDefaultImage:(UIButton*)answerButton
{
    [answerButton setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"ans%d.png", answerButton.tag]] forState:UIControlStateNormal];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM