最近,我开始在斯坦福大学( U. )开设在线课程“iTunes开发”。
我正试着为前几堂课做家庭作业。我按照演练完成了构建一个基本计算器的过程,但现在我正在尝试第一个任务,但我似乎无法解决它。它是如下:
您的计算器已经使用浮点数(例如,如果按3/4=它将正确显示结果值0.75),但是,用户无法输入浮点数。补救这个。只允许输入合法浮点数(例如,“192.168.0.1”不是合法浮点数)。
首先,我不确定浮点数是digitPressed还是operationPressed。我甚至尝试过一种名为floatingPointPressed的新方法,但这并没有真正奏效。有人能提供这方面的指点吗?
当我把它看作digitPressed时,我尝试了这样的方法:
if (hasFloatingPoint) {
NSRange range = [[display text] rangeOfString:@"."];
if (range.location == NSNotFound)
{
[display setText:[[display text] stringByAppendingFormat:digit]];
hasFloatingPoint = YES;
}
}
else {
[display setText:[[display text] stringByAppendingFormat:digit]];
}但我想我错过了关键的概念。
我还尝试了另一种解决方案,遗憾的是,我已经取消了,所以我无法提供代码,但所发生的是:我可以按一个数字,比如5,然后是浮点数和3,这样我就可以得到5.3。然后,我设法“禁用”了剩余的输入的浮点。但是我想我对它的要求有点太严格了:例如,我不能输入5.3.2,但是在按了一个操作按钮(+等)之后,它仍然不允许我按浮点按钮。我想我该重新设置我用来做这件事的嘘声了?
我并不是在寻找一个完整的解决方案,但是有人能提供一些如何解决这个问题的基本建议吗?一步一步地概述我应该做什么和想些什么,而不实际提供代码解决方案。
提前谢谢。
发布于 2011-06-18 13:54:47
既然您想知道要查看的位置,那么请查看将NSNumberFormatter附加到输入字段的步骤。
这是验证输入的正确方法,而不是手动检查用户自己输入的每个字符。
编辑我刚刚读到了你正在努力完成的作业。我想我在这里的答案,虽然仍然是正确的方式,但不是最好的方式来做的任务是试图让你去做。
由于您正在逐个读取这些数字,并将它们添加到视图中,并将它们附加到您正在操作的数字中,因此您的原始答案可能是正确的:
decimalEntered标志-将其初始化为“否”当你学到更多的东西时,你会意识到另一种方法就是让用户在字段中输入。将格式化程序连接到字段以验证输入是否为有效数字,但也可以将字符串转换为数字。当按下一个操作数时,该数字将作为操作数的操作数之一保留在一边。
发布于 2011-06-18 13:50:33
好吧。我解决了这个问题。一旦我成功地把我的头绕着它,那就很容易了:
-(IBAction)digitPressed:(UIButton *)sender
{
NSString *digit = [[sender titleLabel] text];
NSRange range = [[display text] rangeOfString:@"."];
if (userIsInTheMiddleOfTypingANumber)
{
if ( ! ([digit isEqual:@"."] && (range.location != NSNotFound))) {
[display setText:[[display text] stringByAppendingFormat:digit]];
}
}
else
{
if ([digit isEqual:@"."]) {
[display setText: @"0."];
}
else {
[display setText: digit];
}
userIsInTheMiddleOfTypingANumber = YES;
}
}发布于 2012-09-23 21:29:22
-(IBAction)floatingPoint:(UIButton *)sender {
NSString *digit = sender.currentTitle;
NSRange range = [self.display.text rangeOfString:@"."];
if(range.location == NSNotFound){
self.display.text = [self.display.text stringByAppendingString:digit];
self.userIsInTheMiddleOfEnteringANumber = YES;
}
}https://stackoverflow.com/questions/6396006
复制相似问题