【问题标题】:How to change image of button如何更改按钮的图像
【发布时间】:2012-07-05 05:09:51
【问题描述】:

我正在使用此代码在滚动视图中显示图像...在此按钮是在 for 循环的帮助下创建的...然后为每个按钮设置图像...现在我想选择多个图像... . 我想当我点击特定按钮时,它的图像替换为“tick image”,当我再次按下它时,替换为原始图像意味着显示未选中..

for(int i=0; i<[imageArray count]; i++)
{
  if((i%4) == 0 && i!=0)
  {
      horizontal = 8.0;
      vertical = vertical + 70.0 + 8.0;
  }

  buttonImage = [UIButton buttonWithType:UIButtonTypeCustom];
  [buttonImage setFrame:CGRectMake(horizontal, vertical, 70.0, 70.0)];
  [buttonImage setTag:i];
  [buttonImage setImage:[arrayOfImages objectAtIndex:i] forState:UIControlStateNormal];
  [buttonImage addTarget:self action:@selector(buttonImagePressed:) forControlEvents:UIControlEventTouchUpInside];
  [myScrollView addSubview:buttonImage];

  horizontal = horizontal + 70.0 + 8.0;
}

我尝试使用此代码在 (buttonImagePressed) 方法中更改状态时更改图像...

[buttonImage setImage:[UIImage imageNamed:@"Checkmark.png"] forState:UIControlStateSelected];

但它不起作用......它每次只更改最后一个按钮的图像,而不是特定点击的按钮......我也尝试隐藏按钮,但它再次只隐藏最后一个按钮。我哪里做错了???

还有其他方法可以改变吗???请帮帮我

【问题讨论】:

  • 我认为这里使用表格视图和更改披露指示符更容易。
  • 但是我在单行中使用了四个图像......而这对于披露指示器是不可能的......

标签: iphone objective-c ios5 uiview uibutton


【解决方案1】:

您应该使用 UIControlStateNormal 而不是 UIControlStateSelected 并保留一些 bool 值来显示该按钮是否先前被选中,或者您可以根据选择将按钮的 selected 属性设置为 true 或 false:

-(void) buttonImagePressed:(UIButton*)sender
{
   UIButton *button = sender;
  if(button.selected) //already selected so now it should be deselected
  {
     [button setImage:[UIImage imageNamed:@"UnCheckmark.png"] forState:UIControlStateNormal];
      button.selected = false;
  }
   else
   { 
      [button setImage:[UIImage imageNamed:@"Checkmark.png"] forState:UIControlStateNormal];
      button.selected = true;
   }

}

【讨论】:

  • 是的,它会起作用,因为每个按钮都有选择的属性,该属性将识别它是否被选中。
【解决方案2】:

为此,取一个全局标志变量为BOOL Flag = NO;

也为每个按钮设置标签。

在方法中

-(IBAction)buttonImagePressed:(UIButton *)sender{
 if(flag==NO){
   flag=YES;
   [sender setImage:[UIImage imageNamed:@"Checkmark.png"] forState:UIControlStateNormal];
  }
 else{
 flag=NO;
 [sender setImage:[arrayOfImages objectAtIndex:sender.tag] forState:UIControlStateNormal];
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多