当用户按下iPhone上的button时,更改UIButton上的图像

当用户按下该button时,我想更改UIButton上的图像。 所以,我写了

btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal]; 

之后我改变了看法。

图像正在改变,但不显示改变的图像。我认为控制进入下一个视图这就是为什么发生。 但是我想展示这个变化,我该怎么做? Plz帮我做这个..

我正在使用Interface Builder,在其中我添加了一个UIButton的视图。

  1. 我定义了默认select的button,并select我的图像作为选定的状态(使用Inspector窗口中的下拉列表在select图像之前select“ Selected State Configuration ”)。

  2. 在控制器中创build一个IBAction并将button连接到该操作。

  3. 然后看下面的代码:

  -(IBAction) toggleUIButtonImage:(id)sender{ if ([sender isSelected]) { [sender setImage:unselectedImage forState:UIControlStateNormal]; [sender setSelected:NO]; } else { [sender setImage:selectedImage forState:UIControlStateSelected]; [sender setSelected:YES]; } } 

我认为这是一个相当顺利的解决scheme。 希望能帮助到你!

这是我正在做的最简单的方法,它每次都有效

 -(void)buttonTouched:(id)sender { UIButton *btn = (UIButton *)sender; if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]]) { [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal]; // other statements } else { [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal]; // other statements } } 

您可以对其他状态使用其他类似的检查,例如SELECTED,ENABLED,HIGHLIGHTED。

你在那里的代码应该可以正常工作,但是我猜测,直到下一次运行事件循环,button图像才会出现变化,所以在视图被切换之前你不会看到它。

这是一种黑客,但你可以尝试延迟视图更改只是稍微,这样的button将更新。

所以,而不是这个:

 [btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal]; [self showMyOtherView]; 

尝试这个:

 [btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal]; [self performSelector:@selector(showMyOtherView) withObject:self afterDelay:0.01]; 

要更改所选状态的图像,必须调用状态为UIControlStateSelected setImage 。 您可以为不同的状态设置不同的图像(正常,突出显示,禁用,选定等)。

如果你想在点击button时改变图像,这种方式完美地工作:

 -(IBAction)buttonClicked: (id)sender { UIButton *buttonObj = (UIButton*)sender; [buttonObj setBackgroundImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal]; } 

最简单的方法是在Interface Builder中简单地设置突出显示的图像。

build立在Nicsoft的答案上。

 -(void)viewDidLoad { [super viewDidLoad]; [self.button setImage:[UIImage imageNamed:@"unselectedImageName"] forState:UIControlStateNormal]; [self.button setImage:[UIImage imageNamed:@"selectedImageName"] forState:UIControlStateSelected]; } -(IBAction)toggleButton:(UIButton *)sender { sender.selected = !sender.selected; // Add logic here } 

我昨天晚上写了这样的代码,我不必诉诸任何奇怪的拖延手段。 在这个特定的情况下,我从一个tableViewCell里面做。 这是比你所要求的更多的代码,但它显示了我使用的整个过程。 正如你所看到的,我select在触摸button期间没有任何特殊的图像。

 // Button set up, inside cellForRowAtIndexPath: // imageFrame is just the rect that you want the button to occupy [self setFavorite:[[UIButton alloc] initWithFrame:imageFrame]]; [[self favorite] addTarget:self action:@selector(toggleFavorite:) forControlEvents:UIControlEventTouchUpInside]; [cell addSubview:[self favorite]]; [self draw]; // definition of the callback specified above - (void) toggleFavorite:(id) sender { if (favoriteState == 0 ){ favoriteState = 1; } else { favoriteState = 0; } [self draw]; } // the draw method, to set the images // favOn and favOff are statically defined at the top of the class - (void) draw { if (favoriteState != 0) { [[self favorite] setBackgroundImage:favOn forState:UIControlStateNormal]; [[self favorite] setBackgroundImage:favOn forState:UIControlStateHighlighted]; } else { [[self favorite] setBackgroundImage:favOff forState:UIControlStateNormal]; [[self favorite] setBackgroundImage:favOff forState:UIControlStateHighlighted]; } } 

讨厌添加到过多的答案,但:

  1. 在IB中select图像作为button的默认和select状态。
  2. 连接一个IBAction并保持简单。

    @IBAction func buttonTapped(sender: UIButton){sender.selected = !sender.selected}

完成。