2012-02-15 62 views
0

我也跟着教程做的是iOS計算器,和我現在想要一個小數位按鈕添加到它。這裏是我的代碼添加一個小數點按鈕到iOS計算器

頭文件:

#import <UIKit/UIKit.h> 

@interface CalcViewController : UIViewController { 

float result; 
float selectedNumber; 

int selectedOperation; 

IBOutlet UILabel *calcScreen; 
} 

-(IBAction)numberPressed:(id)sender; 
-(IBAction)operationPressed:(id)sender; 
-(IBAction)clearNumber:(id)sender; 
-(IBAction)clearOperation:(id)sender; 

@end 

這是我實現文件

#import "CalcViewController.h" 

@implementation CalcViewController 

-(IBAction)numberPressed:(id)sender { 
selectedNumber = selectedNumber * 10 + (float) [sender tag]; 
calcScreen.text = [NSString stringWithFormat:@"%2g", selectedNumber]; 
} 

-(IBAction)operationPressed:(id)sender { 
if (selectedOperation == 0) { 
    result = selectedNumber; 

} else { 
    switch (selectedOperation) { 
     case 1: 
      result = result + selectedNumber; 
      break; 
     case 2: 
      result = result - selectedNumber; 
      break; 
     case 3: 
      result = result * selectedNumber; 
      break; 
     case 4: 
      result = result/selectedNumber; 
      break; 
     case 5: 
      selectedOperation = 0; 
      break; 



    } 
} 
selectedNumber = 0; 
calcScreen.text = [NSString stringWithFormat:@"%2g", result]; 
if ([sender tag] == 0) result = 0; 
selectedOperation = [sender tag]; 

} 


-(IBAction)clearNumber:(id)sender { 
selectedNumber = 0; 
calcScreen.text = @"0"; 
} 

-(IBAction)clearOperation:(id)sender { 
selectedNumber = 0; 
calcScreen.text = @"0"; 
selectedOperation = 0; 
} 

我在另一個線程,有人使用方法提示看到:

- (IBAction)Decimal:(id)sender 
{ 
NSString *currentText = calcScreen.text; 
if ([currentText rangeOfString:@"." options:NSBackwardsSearch].length == 0) { 
    calcScreen.text = [calcScreen.text stringByAppendingString:@"."]; 
} 

然而,這似乎並不適用於我。它的確會讓我輸入小數點,但是當輸入第二個數字時,小數點會丟失。任何人都可以提出一個我可以實現的方法來實現我想要的嗎?

乾杯提前!

+0

因此具有u發現這個問題的任何解決方案? – lakesh 2012-10-29 16:56:11

回答

0

我快的想法:守號爲屏幕上的文本,添加其他數字和/或小數點它作爲文本。只有在執行操作時纔將其轉換爲浮點型(我會使用double myself,btw)。建議的方法應該可以正常工作。

是這樣的:

-(IBAction)numberPressed:(id)sender { 
    calcScreen.text = [calcScreen.text stringByAppendingString:[sender tag]]; 
} 

-(IBAction)operationPressed:(id)sender { 
    selectedNumber = [calcScreen.text floatValue]; 
    ... 
} 
+0

有沒有可能寫一些代碼來展示你的意思? – George 2012-02-15 15:10:50

+0

添加代碼示例。我沒有測試過它,所以它可能不完全正確。 – fishinear 2012-02-15 15:29:42

+0

謝謝,但不幸的是,它創建了一個導致應用程序崩潰的錯誤。行 calcScreen.text = [calcScreen.text stringByAppendingString:[發送方標籤]]; 發送錯誤:不兼容的整數到指針轉換髮送'NSInteger'(aka'int)到類型'NSString *'的參數 任何想法? – George 2012-02-15 15:46:30

0

一個快速尖,而是採用 int selectedOperation;...後來在代碼

switch (selectedOperation) { 
    case 1: 
     result = result + selectedNumber; 
     break; 
    case 2: 
     result = result - selectedNumber; 
    ... 

嘗試使用typedef enum

typedef enum { 
    OperationTypeAdd = 0, 
    OperationTypeSub, 
    ... 
    } OperationType 

switch

switch (operationType) { 
    case OperationTypeAdd: 
     result = result + selectedNumber; 
     break; 
    case operationTypeSub: 
     result = result - selectedNumber; 
     break; 
+0

我在哪裏聲明typedef枚舉? – George 2012-02-16 09:37:28

+0

您在頭文件中聲明瞭枚舉類型。你的情況,這將是'了'@interface CalcViewController'之前CalcViewController.h',而且比後來改爲'INT selectedOperation;'你寫OperationType selectedOperation。閱讀關於枚舉類型的內容[here](http://stackoverflow.com/questions/707512/what-is-a-typedef-enum-in-objective-c)。我讀過你有問題將整數轉換爲字符串,請嘗試使用類似'[NSString stringWithFormat:@「%i」,intValue];'@George – pawelropa 2012-02-16 18:14:47