Objective C - 在字符串的特定部分添加字符

时间:2009-07-05 13:23:34

标签: iphone objective-c cocoa cocoa-touch

我为iPhone制作了二次方程求解器,当单击文本框时,会出现我自己的自定义键盘。我有一个按钮可以改变数字是正数还是负数。现在我发生的事情是当按下按钮时(0 - 文本的当前值)是文本框中显示的内容,所以如果数字是正数,它将变为负数,如果它是消极的,它会变得积极。我这样做有一些问题所以我想要的是在字符串的开头加一个减号,如果数字是正数,如果数字是负数,则减号将被删除。谁能给我这方面的指导?

3 个答案:

答案 0 :(得分:3)

我没有否定使用数学函数,而是将NSMutableString分配给我的UITextField,然后使用insertString:atIndex插入了一个“ - ”符号,然后我将更改后的字符串重新分配给了我的UITextField。要在正面和负面之间切换,我创建了一个if函数,所以如果我的textfield的浮点值大于或等于0,则插入“ - ”,但如果我的文本字段的浮点值小于零,则“ - “使用deleteCharactersInRange删除”。这是我的代码:

- (IBAction)positivity{

    NSMutableString *a = [NSMutableString stringWithString:aVal.text];


    if([aVal.text floatValue]>=0){      
    [a insertString: @"-" atIndex: 0];
    aVal.text = a;
    }
    else if([aVal.text floatValue]<0){
        NSRange range = {0,1};
        [a deleteCharactersInRange:range];
        aVal.text = a;
}

}

aVal是我要更改的UITextField的名称。

答案 1 :(得分:2)

虽然可以直接操作数值的字符串表示,但这样的方法是个坏主意。它不仅效率低于其他替代方案,而且可能不正确。 (例如, @Ken 的答案会产生两个减号。)

您可能想要做的是否定数值(只需将其乘以-1,或者按照建议将其从0减去)并反映界面中的更改(你提到一个文本框)。

如果你正在使用标准的Cocoa控件(它继承自NSControl,就像NSTextField那样),我建议使用-[NSControl setIntegerValue:]来更改文本字段的文本。如果您(可以)很好地分解您的UI并且在二次方程中为每个变量都有一个文本字段,这应该相当简单。 (如果您使用的不是整数值,请使用-setDoubleValue:-setFloatValue:之类的内容。)

如果您必须事先创建自己的字符串,则使用整数格式说明符将自动显示“-”符号(如果适用)。请务必使用 %ld 而不是 %d (感谢@Peter!)作为NSInteger值的格式说明符,以避免可能会截断更大的值比32位。例如:

NSString *result = [NSString stringWithFormat:@"%ld", nsIntegerValue];

在更一般的意义上,如果您需要插入动态获取的字符串(不仅仅是您可以在编译时创建格式字符串的字符串),您还可以使用NSMutableString及其方法{{ 3}}和-appendString:

答案 2 :(得分:2)

直字符串方法的替代方法是不使用字符串。不久前,我为iPhone编写了一个图形计算器,它将内部存储在NSStrings的NSMutableArray中。数组中的每个槽对应于等式中的一个元素,例如“x”,“^”,“sin(”等等。

当我需要否定方程式时,告诉数组insertObject:@“ - ”atIndex:0比尝试将其直接插入字符串要容易得多。然后,无论何时更改数组,我只需重新生成方程字符串,如下所示:

NSString * newEquation = [equationElements componentsJoinedByString:@""];