制作一个按钮以向标签添加/减去一个值,该标签将显示与标签上该数字对应的图片
Posted
技术标签:
【中文标题】制作一个按钮以向标签添加/减去一个值,该标签将显示与标签上该数字对应的图片【英文标题】:Make a button to add/subtract a value to a label which will show a corresponding picture to that number on the label 【发布时间】:2014-07-07 12:55:13 【问题描述】:我正在自学,不知道我的代码有什么问题以及如何编写更短的干净代码?
我希望数字只设置在 1、2、3、4 之间。 所以我不想要负数或任何大于 4 的数字。 数字在模拟器上显示得很好且正确,但图片变得一团糟。 它去了 1,2,3,4,然后在返回 4,3,2,1 时就搞砸了。
- (IBAction)plusLevelPressed:(id)sender
int intValueFromFirstLabel = [_lvlLabel.text intValue];
if(intValueFromFirstLabel != 4)
_lvlLabel.text = [NSString stringWithFormat:@"%d",[_lvlLabel.text intValue]+1];
//change image according to lvl selection
if(intValueFromFirstLabel == 0)
UIImage *lvl1 = [UIImage imageNamed:@"lvl1.jpg"];
[_lvlMap setImage:lvl1];
if(intValueFromFirstLabel == 1)
UIImage *lvl2 = [UIImage imageNamed:@"lvl2.jpg"];
[_lvlMap setImage:lvl2];
if(intValueFromFirstLabel == 2)
UIImage *lvl3 = [UIImage imageNamed:@"lvl3.jpg"];
[_lvlMap setImage:lvl3];
if(intValueFromFirstLabel == 3)
UIImage *lvl4 = [UIImage imageNamed:@"lvl4.jpg"];
[_lvlMap setImage:lvl4];
- (IBAction)minusLevelPressed:(id)sender
int intValueFromFirstLabel = [_lvlLabel.text intValue];
if(intValueFromFirstLabel != 1)
_lvlLabel.text = [NSString stringWithFormat:@"%d",[_lvlLabel.text intValue]-1];
//change image according to lvl selection
if(intValueFromFirstLabel == 0)
UIImage *lvl1 = [UIImage imageNamed:@"lvl1.jpg"];
[_lvlMap setImage:lvl1];
if(intValueFromFirstLabel == 1)
UIImage *lvl2 = [UIImage imageNamed:@"lvl2.jpg"];
[_lvlMap setImage:lvl2];
if(intValueFromFirstLabel == 2)
UIImage *lvl3 = [UIImage imageNamed:@"lvl3.jpg"];
[_lvlMap setImage:lvl3];
if(intValueFromFirstLabel == 3)
UIImage *lvl4 = [UIImage imageNamed:@"lvl4.jpg"];
[_lvlMap setImage:lvl4];
我正在学习这个以建立一个更好的职业生涯,所以我非常感谢所有的帮助! 谢谢!
【问题讨论】:
“搞砸了”是什么意思? :D 我们无法读心。您预计会发生什么以及实际发生了什么? 【参考方案1】:你是不是碰巧去了:
[self plusLevel]; intValueFromFirstLabel == 0, _lvlLabel == 1
[self plusLevel]; intValueFromFirstLabel == 1, _lvlLabel == 2
[self plusLevel]; intValueFromFirstLabel == 2, _lvlLabel == 3
[self plusLevel]; intValueFromFirstLabel == 3, _lvlLabel == 4
然后
[self minusLevel]; intValueFromFirstLabel == 4, _lvlLabel == 3 *
[self minusLevel];
[self minusLevel];
[self minusLevel];
当您开始通过 minusLevel 时,第一次运行时的 intValueFromFirstLabel 为 4,因为它采用 _lvlLabel 的值但是,您的 minusLevel 没有条件
if(intValueFromFirstLabel == 4)
所以我认为你看到的是当你减去等级时,它似乎落后了 1 级,对吗?
无论哪种方式,我认为您可以像这样将代码改进为更短:
-(IBAction)plusLevelPressed:(id)sender
int intValueFromFirstLabel = [_lvlLabel.text intValue];
// only update level image if level is within 0 to 3
if(intValueFromFirstLabel > -1 && intValueFromFirstLabel < 4)
[self setLevelImageForLevelNumber:intValueFromFirstLabel];
_lvlLabel.text = [NSString stringWithFormat:@"%d",[_lvlLabel.text intValue]+1];
-(IBAction)minusLevelPressed:(id)sender
int intValueFromFirstLabel = [_lvlLabel.text intValue];
// only update level image if level is within 0 to 3
if(intValueFromFirstLabel > -1 && intValueFromFirstLabel < 4)
[self setLevelImageForLevelNumber:intValueFromFirstLabel];
_lvlLabel.text = [NSString stringWithFormat:@"%d",[_lvlLabel.text intValue]-1];
-(void)setLevelImageForLevelNumber:(int)levelNumber
NSString *strImageName = [[NSString alloc] initWithFormat:@"lvl%d.jpg", levelNumber + 1];
UIImage *lvlImage = [UIImage imageNamed:strImageName];
[_lvlMap setImage:lvlImage];
【讨论】:
嗨,非常感谢您的意见,我非常喜欢新的更短的代码。 不幸的是,由于“intValueFromFirstLabel以上是关于制作一个按钮以向标签添加/减去一个值,该标签将显示与标签上该数字对应的图片的主要内容,如果未能解决你的问题,请参考以下文章