首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CS193P -向iOS计算器添加浮点按钮

CS193P -向iOS计算器添加浮点按钮
EN

Stack Overflow用户
提问于 2011-06-18 12:29:20
回答 10查看 5.3K关注 0票数 7

最近,我开始在斯坦福大学( U. )开设在线课程“iTunes开发”。

我正试着为前几堂课做家庭作业。我按照演练完成了构建一个基本计算器的过程,但现在我正在尝试第一个任务,但我似乎无法解决它。它是如下:

您的计算器已经使用浮点数(例如,如果按3/4=它将正确显示结果值0.75),但是,用户无法输入浮点数。补救这个。只允许输入合法浮点数(例如,“192.168.0.1”不是合法浮点数)。

首先,我不确定浮点数是digitPressed还是operationPressed。我甚至尝试过一种名为floatingPointPressed的新方法,但这并没有真正奏效。有人能提供这方面的指点吗?

当我把它看作digitPressed时,我尝试了这样的方法:

代码语言:javascript
复制
    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,但是在按了一个操作按钮(+等)之后,它仍然不允许我按浮点按钮。我想我该重新设置我用来做这件事的嘘声了?

我并不是在寻找一个完整的解决方案,但是有人能提供一些如何解决这个问题的基本建议吗?一步一步地概述我应该做什么和想些什么,而不实际提供代码解决方案。

提前谢谢。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-06-18 13:54:47

既然您想知道要查看的位置,那么请查看将NSNumberFormatter附加到输入字段的步骤。

这是验证输入的正确方法,而不是手动检查用户自己输入的每个字符。

编辑我刚刚读到了你正在努力完成的作业。我想我在这里的答案,虽然仍然是正确的方式,但不是最好的方式来做的任务是试图让你去做。

由于您正在逐个读取这些数字,并将它们添加到视图中,并将它们附加到您正在操作的数字中,因此您的原始答案可能是正确的:

  • 继续接受被添加的数字
  • 添加decimalEntered标志-将其初始化为“否”
  • 如果输入了十进制,请检查标志,如果不是,则接受它,并将标志设置为是。
  • 如果输入了十进制,并且标志是肯定的,请不要接受它。
  • 每当您按操作数时,将此标志设置为否。

当你学到更多的东西时,你会意识到另一种方法就是让用户在字段中输入。将格式化程序连接到字段以验证输入是否为有效数字,但也可以将字符串转换为数字。当按下一个操作数时,该数字将作为操作数的操作数之一保留在一边。

票数 2
EN

Stack Overflow用户

发布于 2011-06-18 13:50:33

好吧。我解决了这个问题。一旦我成功地把我的头绕着它,那就很容易了:

代码语言:javascript
复制
-(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;

    }

}
票数 5
EN

Stack Overflow用户

发布于 2012-09-23 21:29:22

代码语言:javascript
复制
-(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;

    }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6396006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档