1

私は最近、スタンフォード大学の iPhone 開発に関するオンライン コースを iTunes U で受講し始めました。

私は今、最初の数回の講義のために宿題をやろうとしています。基本的な電卓を作成するチュートリアルをたどりましたが、今は最初の割り当てを試みていますが、うまくいかないようです。それは次のとおりです。

ユーザーが間違った数字ボタンを押した場合に押すための「バックスペース」ボタンを実装します。これは「元に戻す」ことを意図したものではないため、間違った操作ボタンを押すと運が悪くなります。入力途中の数値全体をバックスペースで削除した場合の処理​​方法を決定するのはあなた次第ですが、ディスプレイを完全に空白にすることはおそらくあまりユーザーフレンドリーではありません.

私はこれに従いました:iOS電卓でバックスペースを作成する

だからコードは

-(IBAction)backspacePressed:(UIButton *)sender {

    NSMutableString *string = (NSMutableString*)[display text];

    int length = [string length];

    NSString *temp = [string substringToIndex:length-1];

    [display setText:[NSString stringWithFormat:@"%@",temp]];

}

私の質問は、最後が数字かオペランドかを確認するべきではないですか? オペランドの場合は実行せず、数字の場合は削除します...

4

4 に答える 4

1

まず第一に、そのコードにはいくつかの不要なステップがあります...そしてあなたの質問に答えるために、はい、あなたはオペランドをチェックする必要があります。これが私がチェックでそのメソッドを書く方法です:

NSString *text = [display text];
int length = [text length];
unichar c = [text characterAtIndex:length];
NSCharacterSet *digits = [NSCharacterSet decimalCharacterSet];
if ([digits characterIsMember:c] || c == '.') {
    NSString *temp = [[display text] substringToIndex:length-1];
    [display setText:temp];
}
于 2012-02-04T21:33:25.753 に答える
1

私は自分でコースを始めたばかりです。この投稿は今ではかなり古いものですが、私の解決策は他の人に役立つかもしれません。

- (IBAction)deletePressed:(id)sender 
{
    NSString *displayText = [display text];
    int length = [displayText length];
    if (length != 1) {
        NSString *newDisplayText = [displayText substringToIndex:length-1];
        [display setText:[NSString stringWithFormat:@"%@",newDisplayText]];
    } else {
        userIsInTheMiddleOfEnteringANumber = NO;
        NSString *newDisplayText = @"0";
        [display setText:[NSString stringWithFormat:@"%@",newDisplayText]];
    }
}
于 2012-04-27T21:10:16.267 に答える
1

また、iTunes U で 2011 年秋のクラスも受講しています。

ウォークスルーにより、インスタンス変数 userIsInTheMiddleOfEnteringANumber が得られるので、それが YES かどうかを確認しました。

- (IBAction)backspacePressed {
    if (self.userIsInTheMiddleOfEnteringANumber) {
        if ([self.display.text length] > 1) {
            self.display.text = [self.display.text substringToIndex:[self.display.text length] - 1];
        } else {
            self.display.text = @"0";
            self.userIsInTheMiddleOfEnteringANumber = NO;
        }
    }
}
于 2012-02-05T05:21:15.367 に答える