2012-07-25 122 views
1

對於一個學校任務,我被告知要製作一個計算器應用程序,就像聚光燈計算器一樣。它實時工作,沒有按鈕可以開始。實時計算器

到目前爲止,這是我的代碼。它是在文本字段中寫入的,事件編號爲。林相當肯定這是錯的,但我找不到替代解決方案。此外,我還沒有得到實時的工作,所以我有點恢復到按下文本字段時完成以下步驟。

- (IBAction)Didend_Action:(id)sender { 
    NSString *list = [Sum_TextField text]; 
    NSArray *listItemsArray = [list componentsSeparatedByString:@" "]; 
    float firstNumber = [[listItemsArray objectAtIndex: 0] floatValue]; 
    NSString *symbol = [listItemsArray objectAtIndex: 1]; 
    float secondNumber = [[listItemsArray objectAtIndex: 2] floatValue]; 
    { 
    Calculator* calc = [[Calculator alloc] init]; 
    [calc setNum1:firstNumber]; 
    [calc setNum2:secondNumber]; 
    if ([symbol isEqualToString:@"-"]) 
    { 
     [calc minus]; 
    } 
    else if ([symbol isEqualToString:@"+"]) 
    { 
     [calc add]; 
    } 
    if ([symbol isEqualToString:@"*"]) 
    { 
     [calc multiply]; 
    } 
    else if ([symbol isEqualToString:@"/"]) 
    { 
     [calc divide]; 

    } 
    [Answer_TextField setText:[NSString stringWithFormat:@"%d", [calc answer]]]; 
    } 
} 
+3

好的,我對Objective-C一無所知,所以我懷疑我可以幫助解決您的問題。但是我會在這裏提出問題來幫助你:C和C++是不同的語言,所以你不應該用兩者來標記你的問題。但是這個問題實際上是關於*另一種不同的語言*:Objective-C。我這次爲你解決了標籤問題。歡迎來到Stack Overflow。 – 2012-07-25 04:38:21

回答

2

我認爲更好的方式來做到這一點是執行像textViewDidChange:的UITextViewDelegate協議的方法。例如,你可以這樣做:

- (void)textViewDidChange:(UITextView *)textView { 

    NSString *currentText = [textview text]; 
    NSArray *currentItems = [currentText componenetsSeparatedByString:@" "]; 
    float result = 0.0; 

    //If a valid expression is in the text view 
    if([currentItems count] > 2) { 

     float num1 = [[currentItems objectAtIndex:0] floatValue]; 
     float num2 = [[currentItems objectAtIndex:2] floatValue]; 
     NSString *operator = [currentItems objectAtIndex:1]; 

     if([operator isEqualToString:@"+"]) { 

      result = num1 + num2; 
      answerTextField.text = [NSString stringWithFormat:@"%f", result]; 
     } 
     else if([operator isEqualToString:@"-"]) { 

      result = num1 - num2; 
      answerTextField.text = [NSString stringWithFormat:@"%f", result]; 
     } 
     else if([operator isEqualToString:@"*"]) { 

      result = num1 * num2; 
      answerTextField.text = [NSString stringWithFormat:@"%f", result]; 
     } 
     else if([operator isEqualToString:@"/"]) { 

      result = num1/num2; 
      answerTextField.text = [NSString stringWithFormat:@"%f", result];    
     } 
     else{ 

      answerTextField.text = @"Invalid Operation"; 
     } 
    } 
} 

這將在用戶每次在文本視圖中編輯文本時調用。它應該可以工作,但我沒有對它進行測試。確保在任何文件,這個代碼是在標題,你這樣做:

@interface yourClassName : yourSuperclass <UITextViewDelegate> { 

    //Your instance variables 
} 

//Your method and property declarations 

編輯:

比方說,我把- (void)textViewDidChange:(UITextView *)textView代碼在一個名爲MyClass.m文件。然後將文件MyClass.m應該是這樣的:

@implementation MyClass 

- (void)textViewDidChange:(UITextView *)textView { 

    //All the above code goes here 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    //INCLUDE THESE LINES 
    Sum_TextField.delegate = self; 
    Answer_TextField.delegate = self; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

@end 

在頭文件(MyClass.h),我會把這樣的:

@interface MyClass : UIViewController <UITextViewDelegate> 

//Note: you don't declare - (void)textViewDidChange:(UITextView *)textView in the header file because you are implementing 
//a protocol method. 

//MAKE SURE SUM_TEXTFIELD AND ANSWER_TEXTFIELD ARE UITEXTVIEWS NOT UITEXTFIELDS 
@property (strong, nonatomic) IBOutlet UITextView *Sum_TextField; 
@property (strong, nonatomic) IBOutlet UITextView *Answer_TextField; 

@end 

希望這有助於!

+0

現在就試試這個:)謝謝你的回答。我一定會回來,讓你知道會發生什麼 – 2012-07-25 05:35:20

+0

你的答案的第二部分是什麼意思。 @interface yourClassName:yourSuperclass {} 該部分是否意味着在我的ViewController.h中寫入代碼? – 2012-07-25 05:53:13

+0

我已經在沒有錯誤的正確位置添加了所有代碼,並且有一些調整:)我現在運行該應用程序,並且插入了例如10 + 3的和,沒有任何反應,沒有任何內容出現在Answer_TextField中。 非常抱歉,我的noobieness,但我將不得不添加更多的代碼,像大東西缺少將信息發送到Answer_TextField – 2012-07-25 06:18:43