2013-06-23 74 views
0

我正在學習針對iOS的Objective-C編程,並且遇到了一個小問題。我正在構建一個基本的RPN計算器,我正在努力讓用戶可以輸入浮點數。但是,我需要防止他們輸入非法的浮點數(如1324.343.34)。我試着添加一個BOOL和一個if語句,但它太亂了,所以我只是添加了一個單獨的動作,如果他們按下「。」。不幸的是,儘管decimalPressed操作是第二次,它仍然在數字按下操作之前,我需要它後去。有任何想法嗎?如何在Cocoa Touch中優先考慮一個動作(讓它先行)

- (IBAction)digitPressed:(UIButton *)sender 
{ 
    NSString *digit = [sender currentTitle]; 
    if (self.userIsInTheMiddleOfEnteringANumber) { 
     if (self.dotPressed == NO || ([digit isEqualToString:@"."]==NO)) { 
      self.display.text = [self.display.text stringByAppendingString:digit]; 
      self.dotPressed = NO; 
     } 
    } else { 
     self.display.text = digit; 
     self.userIsInTheMiddleOfEnteringANumber = YES; 
    } 
} 

- (IBAction)decimalPressed:(UIButton *)sender { 
    self.dotPressed = YES; 
} 

回答

0

你是否在代碼或界面生成器中將按鈕連接到自己的操作?

您可以更改「。」按鈕的decimalPressed:方法被稱爲「觸摸裏面」而不是「觸摸裏面」。確保digitPressed:方法被稱爲「觸摸裏面」。

這將確保首先調用decimalPressed:,當按下按鈕時,然後在釋放按鈕時調用digitPressed:

您可以直接在代碼中執行此操作,也可以在Xcode中使用Interface Builder執行此操作。

+0

這將工作,謝謝。但我覺得它只是繞過這個問題,而這更像是一個學習問題。就像,如果一個按鈕轉到兩個動作(或3,4等),我該如何選擇它到底是哪個? – Acoustic77

+0

我會假設它會按照您添加目標/操作的順序調用它們。如果你使用Interface Builder,我建議刪除你的UI和按鈕之間的連接,並嘗試使用UIButton的代碼添加它們: - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents) controlEvents;希望有所幫助! –

+0

是的,我試圖打破連接,並按照我希望它們運行的​​順序添加它們,但沒有成功。我只是改變了行動完成的任務,這解決了問題,但我仍然沒有學會如何去做我想要的事。 – Acoustic77