2009-07-05 67 views
3

我已經爲iPhone製作了二次方程解算器,當單擊文本框時,我的自定義鍵盤出現。我有一個按鈕可以改變數字是正面還是負面。現在我發生了什麼是按下按鈕(0 - 文本的當前值)是什麼在文本框中顯示,所以如果數字是正數,它會變成負數,如果它是負數將變成正。我遇到了一些問題,所以我想在字符串的開頭放一個減號,如果數字是正數,並且數字是負數,減號將被刪除。任何人都可以給我這方面的指導嗎?Objective C - 在字符串的特定部分添加字符

回答

3

而不是使用一個數學否定的函數我分配了一個NSMutableString到我的UITextField然後我插入一個「 - 」符號使用insertString:atIndex:然後我重新分配改變的字符串到我的UITextField要切換正面和負面,我創建了一個if函數,所以如果我的float值textfield是greate r或等於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的名稱。

2

雖然你可能直接操縱數值的字符串表示,這種方法是一個壞主意。它不僅比其他替代品效率低,而且可能不正確。 (例如,@Ken的答案會導致兩個減號)

你可能想要做什麼是否定的數值(只是乘以-1,或者從0減去它作爲你建議)並反映在界面(你提到一個文本框)的變化。

如果你使用標準的Cocoa控件(它繼承自NSControl,正如NSTextField所做的那樣),我建議使用-[NSControl setIntegerValue:]來改變文本字段的文本。如果你能夠很好地分解你的UI,並且爲二次方程中的每個變量都有一個文本字段,這應該相當簡單。 (如果您使用的是一個整數值以外的東西,使用類似-setDoubleValue:-setFloatValue:代替。)

如果你必須預先創建自己的字符串,用一個整數格式說明會顯示「-」自動在適當簽署。請務必使用%ld而不是%d(謝謝,@Peter!)作爲NSInteger值的格式說明符,以避免截斷大於32位的值。例如:

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

在更普遍的意義上說,如果你需要插入動態獲得的字符串(不只是東西,你可以創建在編譯時的格式字符串),你也可以使用NSMutableString及其方法-appendString:-insertString:atIndex:

+4

一個小錯誤:%d是一個int,而不是NSInteger。改用%ld(long int)。在64位Mac上,NSInteger是64位,所以如果使用%d,則32位int範圍外的數字將被截斷爲低32位。 – 2009-07-05 16:10:08

+0

抓住彼得,把它融入到我的答案中。 – 2009-07-05 23:11:35

2

直線字符串方法的替代方法是不使用字符串。前一段時間,我爲iPhone編寫了一個圖形計算器,它將公式內部存儲在NSStrings的NSMutableArray中。陣列中的每個插槽對應於方程中的一個元素,例如「x」,「^」,「sin(」等。

當我需要否定方程式時,到insertObject:@「 - 」 atIndex:0,而不是試圖直接將其插入到字符串然後每當陣列被改變,我只是重拍的公式字符串是這樣的:

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