Ios 如何删除UIButton';美国在某些州的形象如何?
我正在做纸牌游戏。我希望卡片背面显示图像,卡片正面显示卡片内容。我已经在背面显示了图像,但我不知道如何在选中时清除它。(所有这些代码都是在选定代码运行时运行的,因此我知道这不是一个不实际更改状态的问题。)以下是我的代码:Ios 如何删除UIButton';美国在某些州的形象如何?,ios,uibutton,uiimage,cs193p,Ios,Uibutton,Uiimage,Cs193p,我正在做纸牌游戏。我希望卡片背面显示图像,卡片正面显示卡片内容。我已经在背面显示了图像,但我不知道如何在选中时清除它。(所有这些代码都是在选定代码运行时运行的,因此我知道这不是一个不实际更改状态的问题。)以下是我的代码: -(void)updateUI { for (UIButton *cardButton in self.cardButtons) { Card *card = [self.game cardAtIndex:[self.cardButtons indexOfObject:
-(void)updateUI {
for (UIButton *cardButton in self.cardButtons) {
Card *card = [self.game cardAtIndex:[self.cardButtons indexOfObject:cardButton]];
[cardButton setTitle:card.contents forState:UIControlStateSelected];
[cardButton setTitle:card.contents forState:UIControlStateSelected | UIControlStateDisabled];
[cardButton setImage:[UIImage imageNamed:@"cardback.png"] forState:UIControlStateNormal];
//I've tried various permutations of the following three lines, but the image never disappears.
[cardButton setImage:nil forState:UIControlStateSelected];
[cardButton setImage:nil forState:UIControlStateSelected | UIControlStateHighlighted];
[cardButton setImage:nil forState:UIControlStateNormal];
cardButton.selected = card.faceUp;
cardButton.alpha=(card.unplayable ? 0.3:1.0);
[self.scoreLabel setText:[NSString stringWithFormat:@"Score: %d",self.game.score]];
}
}
关于我做错了什么有什么想法吗?您可以使用标签:
例如:
- (IBAction)btnClicked:(id)sender {
if([sender tag]==1){
//do something
}
if([sender tag]==2){
//do something else
}
确保通过转到属性检查器为按钮设置不同的标记,并将默认值0更改为其他值
希望这有帮助……我猜你的问题是这样的(从苹果的
setImage:forState:
文档中):
通常,如果未为状态指定属性,则默认值是使用UIControlStateNormal
值。如果未设置UIControlStateNormal
值,则该属性默认为系统值。因此,至少应设置正常状态的值
因此,您不能简单地取消设置某些状态的图像,因为将使用默认图像
我看到了一些解决这个问题的方法:
nil
UIImageView
子视图。如果卡正面朝下,请使用setHidden:
显示子视图。如果卡正面朝上,请使用setHidden:
隐藏子视图。我可能会在自定义按钮类中使用–addTarget:action:forControlEvents:
方法来注册一个显示或隐藏卡片背面子视图的自定义方法注意通过在子视图中显示卡的正面,您可以轻松地将选项2向前推进一步,然后您可以轻松地在这两个子视图之间设置翻转过渡动画,以便卡在按下时“翻转”。一种为其他状态创建透明图像的快速方法,由于nil将默认为UIControlStateNormal的值,因此要分配和分配空图像:
UIImage *cardBackImage = [UIImage imageNamed:@"cardback.png"];
UIImage *cardFrontImage = [[UIImage alloc] init];
[cardButton setImage:cardBackImage forState:UIControlStateNormal];
[cardButton setImage:cardFrontImage forState:UIControlStateSelected];
[cardButton setImage:cardFrontImage forState:UIControlStateSelected|UIControlStateDisabled];
如果您使用setBackgroundImage,就可以了。 这是我的密码
- (void)updateUI
{
for (int i=0; i < self.cardButtons.count; i++) {
Card *card = [self.game cardAtIndex:i];
UIButton *cardButton = self.cardButtons[i];
[cardButton setTitle:card.contents forState:UIControlStateSelected];
[cardButton setTitle:card.contents forState:UIControlStateSelected|UIControlStateDisabled];
cardButton.selected = card.isFaceup;
cardButton.enabled = !card.isUnplayable;
cardButton.alpha = card.isUnplayable ? 0.3 : 1.0;
//handle flipcard backgroundimage changes;
UIImage *backgroundImage = (!cardButton.selected) ? [CardGameViewController cardBackgroundImage] : nil;
[cardButton setBackgroundImage:backgroundImage forState:UIControlStateNormal];
[self updateScoreLabel:self.game.score];
NSArray *matchCards = [self.game.matchCards lastObject];
if (matchCards) {
UIColor *color = [self getOneMatchColor];
for (NSNumber *matchCardIndex in matchCards) {
NSUInteger index = [matchCardIndex integerValue];
UIButton *matchCardButton = self.cardButtons[index];
if (color) matchCardButton.backgroundColor = color;
}
[self.game.matchCards removeLastObject];
}
}
}
-(void)updateUI
{
对于(int i=0;i
我找到的最简单的解决方案是检查按钮是否被标记为选中。如果没有,应用背景图像,否则应用空UIImage。晚会迟到了,我不能投票支持Multicolor Pixel的答案,也不能对其发表评论,我猜是因为我是新来的,没有任何声誉。但这确实是最好、最简单的方法;不需要透明图像或其他视图
我现在学的是和OP一样的课程,遇到了同样的问题。解决方案是,当选择按钮时,仍将图像设置为未选择的状态(为零):
而且您从未为任何其他状态设置过图像。谢谢,但问题不在于图像被删除或没有被错误的按钮删除,而是图像没有被任何按钮删除,无论其状态如何(Paul Hegarty真棒:我从未见过
UIImage*cardFrontImage=[UIImage alloc];
为什么我们没有进行初始化?没有错吗?我是初学者,你能解释一下吗?谢谢。为什么我们不能这样做:UIImage*cardFrontImage=nil;
它也帮助了我。我认为UIImage*cardFrontImage=[UIImage alloc]init]
是一种正确的方法。顺便说一句,Paul Hegarty多次表示,alloc从未在没有init的情况下使用。UIImage*cardfronimage=nil;
不能使用,因为它与[cardButton setImage:nil forState:UIControlStateSelected]相同;
和nil值默认为UIControlStateNormal使用的值。通过给它一个实例化的UIImage,它将“绘制”此图像,即使它正在绘制一个没有图像数据的图像。
UIImage *image = [UIImage imageNamed:@"cardback.png"];
// ...
[cardButton setImage:(card.isFaceUp ? nil : image) forState:UIControlStateNormal];