当用户按下iPhone上的button时,更改UIButton上的图像
当用户按下该button时,我想更改UIButton上的图像。 所以,我写了
btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal];
之后我改变了看法。
图像正在改变,但不显示改变的图像。我认为控制进入下一个视图这就是为什么发生。 但是我想展示这个变化,我该怎么做? Plz帮我做这个..
我正在使用Interface Builder,在其中我添加了一个UIButton
的视图。
-
我定义了默认select的button,并select我的图像作为选定的状态(使用Inspector窗口中的下拉列表在select图像之前select“ Selected State Configuration ”)。
-
在控制器中创build一个
IBAction
并将button连接到该操作。 -
然后看下面的代码:
-(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]; } }
讨厌添加到过多的答案,但:
- 在IB中select图像作为button的默认和select状态。
-
连接一个IBAction并保持简单。
@IBAction func buttonTapped(sender: UIButton){sender.selected = !sender.selected}
完成。