【问题标题】:How to change the image of button when I click the button in IOS?在IOS中单击按钮时如何更改按钮的图像?
【发布时间】:2014-06-15 08:20:56
【问题描述】:

我是IOS新手,点击按钮时尝试更改按钮的图像。

但是按钮的图像没有改变,代码如下:

- (IBAction)modeChangeClick:(id)sender {
    NSLog(@"recordMode = %hhd" , recordMode);
    if(recordMode == YES){
        [self.modeChangeButton setImage:[UIImage imageNamed:@"photomode.png"] forState:UIControlStateNormal];

        [self.view addSubview:self.modeChangeButton];

        recordMode = NO;

    }else if(recordMode == NO){
        [self.modeChangeButton setImage:[UIImage imageNamed:@"recordmode.PNG"] forState:UIControlStateNormal];

        [self.view addSubview:self.modeChangeButton];

        recordMode = YES;
    }

}

上面的代码有问题吗?

提前致谢。

------------编辑----------- --

  • (void)viewDidLoad {

    UIButton *modeChangeButton = [[UIButton alloc] initWithFrame:CGRectMake(200, 450, 60, 60)]; [modeChangeButton setBackgroundImage:[UIImage imageNamed:@"recordmode.PNG"] forState:UIControlStateNormal];

    [self.view addSubview:modeChangeButton];
    

    }

  • (IBAction)modeButtonClick:(id)sender { if (recordMode == YES) {

    [self.modeChangeButton setBackgroundImage:[UIImage imageNamed:@"photomode.png"] forState:UIControlStateNormal];
    recordMode = NO;
    

    }else if (recordMode == NO){

    [self.modeChangeButton setBackgroundImage:[UIImage imageNamed:@"file_viewer.png"] forState:UIControlStateNormal];
    recordMode = YES;
    

    } }

当我单击按钮时,图像发生了变化。 但是我在Viewdidload 添加的第一张图片仍然存在...

问题1

当我点击button时,如何删除我在Viewdidload中添加的第一张图片???

问题2

我可以在单击按钮时修复图像的大小吗? (就像按钮的大小一样或固定重量和高度)???

左边的图片是什么都没有。 右边的图片是当我按下按钮的图像时。它不会改变任何事情。

当我单击图像的一侧时图像会发生变化(不是在图像上)

【问题讨论】:

  • 为什么每次点击时都将按钮重新添加为self.view 的子视图?
  • 所以...不需要使用self.view addSubview:self.modeChangeButton]; ???

标签: ios objective-c uibutton


【解决方案1】:

使用这个

- (IBAction)modeChangeClick:(id)sender {
    NSLog(@"recordMode = %hhd" , recordMode);

  [self.modeChangeButton setBackgroundImage: recordMode ? [UIImage imageNamed:@"photomode.png"] : [UIImage imageNamed:@"recordmode.png"] forState:UIControlStateNormal];

        [self.view addSubview:self.modeChangeButton];

        recordMode = !recordMode;


}

【讨论】:

    【解决方案2】:
     change UIButton Image when Click
    - (IBAction)clickToPutNameOnTheReport:(id)sender {
    
    if ([sender isSelected]) {
        [sender setImage:[UIImage imageNamed:@"red.png"] forState:UIControlStateNormal];
       [sender setSelected:NO];
    
    }
    else{
        [sender setImage:[UIImage imageNamed:@"round.png"] forState:UIControlStateNormal];
         [sender setSelected:YES];
    
    }
    

    }

    【讨论】:

    • 但是当我点击图片时,- (IBAction)modeChangeClick:(UIButton*)sender 没有被调用。看起来图像和按钮是分开的......为什么?
    • 我知道原因了,我有一个新问题...你能帮帮我吗?
    【解决方案3】:

    UISwitch 在 iOS 上常用而不是切换按钮。

    如果你真的想要一个切换按钮,你可以使用按钮的selected 属性(继承自UIControl)。在按钮的action方法中切换selected状态,设置状态为UIControlStateSelected的按钮图片或背景图片。

    【讨论】:

      【解决方案4】:

      您说...但是当我单击图像时,- (IBAction)modeChangeClick:(UIButton*)sender 没有调用..您是否将您的操作连接到 xib 中的按钮?以及如何将图像设置为按钮?

      【讨论】:

      • 是的,我可以按下按钮。但是图像和按钮似乎是分开的。我的按钮大小比图像大。我可以按不在 image 上的按钮,然后调用 modeChangeClick。但是当我点击图片时,不会调用 modeChangeClick
      • 我知道原因了,我有一个新问题...你能帮帮我吗?
      • 尝试使用setimage insted of setBackgroundImage
      【解决方案5】:

      如果你愿意,你可以只隐藏你不想显示的图像,并使用另一个 UIButton 制作另一个方法,使另一个图像可见,另一个用简单的代码隐藏,如下所示:

      - (IBAction)modeChangeClick:(id)sender {
      //the images you want to display
      UIImageView1.hidden = NO;
      UIImageView2.hidden = YES;
      
      //the buttons the user will press
      UIButtonView1.hidden = NO;
      UIButtonView2.hidden = YES;
      
      //another method to change the images
      - (IBAction)modeChangeTheImageClick:(id)sender {
       //the images you want to display
      UIImageView1.hidden = YES;
      UIImageView2.hidden = NO;
      
      //the buttons the user will press
      UIButtonView1.hidden = YES;
      UIButtonView2.hidden = NO;            
      
      }
      

      【讨论】:

        【解决方案6】:

        我看到您正在以编程方式创建一个按钮,但您尚未为其设置目标操作。

        所以在 UIButton *modeChangeButton = [[UIButton alloc] initWithFrame:CGRectMake(200, 450, 60, 60)]; 你需要添加这个: [modeChangeButton targetForAction:@selector(modeChangeClick:) withSender:modeChangeButton];

        希望这会有所帮助!干杯

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-24
          • 1970-01-01
          • 1970-01-01
          • 2013-11-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多