Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何更改按钮的图像_Iphone_Objective C_Ios5_Uiview_Uibutton - Fatal编程技术网

Iphone 如何更改按钮的图像

Iphone 如何更改按钮的图像,iphone,objective-c,ios5,uiview,uibutton,Iphone,Objective C,Ios5,Uiview,Uibutton,我正在使用此代码在滚动视图中显示图像。。。在这种情况下,按钮是在for循环的帮助下创建的。。。然后为每个按钮设置图像。。。现在我想选择多个图像。。。我想当我点击特定按钮时,其图像替换为“勾选图像”,当我再次按下该按钮时,替换为原始图像意味着显示未选中 for(int i=0; i<[imageArray count]; i++) { if((i%4) == 0 && i!=0) { horizontal = 8.0; vertical = v

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

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;
}
但它不起作用。。。它每次只改变最后一个按钮的图像,而不是特定的点击按钮。。。。我还试图隐藏按钮,但它再次只隐藏最后一个按钮。我哪里做错了


还有别的办法改变它吗???请帮助我

而不是uicontrol状态选择您应该使用uicontrol状态正常并保留一些布尔值,以显示该按钮之前是否已选择,或者您可以根据选择将按钮的选定属性设置为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;
   }

}

您应该使用UIControlStateNormal而不是uicontrol StateSelected,并保留一些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;
   }

}

为此,将全局标志变量设置为
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];
 }
}

为此,将全局标志变量设置为
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];
 }
}

我认为在这里使用表视图和更改披露指标更容易。但我在一行中使用了四个图像。。。这是不可能与披露指标…我认为在这里它更容易使用一个表视图和更改披露指标。但我使用四个图像在一行。。。这在披露指标中是不可能的……是的,它将起作用,因为每个按钮都选择了属性,该属性将标识它是否被选中。是的,它将起作用,因为每个按钮都选择了属性,该属性将标识它是否被选中。