2012-06-29 73 views
0

我知道IBAction和IBOutlet之間的差異,但我不知道什麼時候應該使用一個。什麼時候應該使用IBOutlet而不是IBAction?

例如,我試圖製作一個計算器。我有十個按鈕和一個標籤來顯示結果。我必須在我的界面中創建十個IBOutlets嗎?如果不是,爲什麼不呢?

+0

+1撤消可笑downvote – 9dan

+0

http://stackoverflow.com/questions/1643007/iboutlet-and-ibaction – 9dan

+0

@ 9dan這是一種也許是一種重複。 – Vervious

回答

2

好吧,IBOutlets和IBActions有兩個獨立的目的。

IBActions基本上是可以通過IB連接到UI元素的方法。它們爲您的對象提供了在UI出現問題時得到通知的方式。它們在調用時還會提供sender參數,以便您可以訪問從方法內發送消息的UI元素。

另一方面,IBOutlet提供了一種在任何時候獲取對代碼中UI元素的引用的方法,當您需要更改UI的各個方面時會使用它。

對於您的情況,您並不需要爲按鈕設置IBOutlets,因爲您無需更改任何關於它們的任何內容,只需在按下按鈕時收到通知。作爲一個說明,如果你有很多按鈕,並且你出於某種原因需要通過代碼訪問它們來改變它們,我不推薦使用10個IBOutlets。相反,我會使用viewWithTag:方法,並相應地設置每個按鈕標籤,以便您不必爲每個按鈕創建IBOutlet。

4

IBOutlet是一個到對象的連接,而IBAction是一個連接到要作爲回調調用的方法。例如,您可能有十個按鈕和一個標籤,但可以使用IBOutlet連接到標籤(以便您可以更新其值)以及連接到每個十個按鈕的onTouchUpInside事件的單個功能- (IBAction)buttonPressed:(id)sender;。然後,buttonPressed:方法的實現將需要檢查sender來確定它的價值。

如果這是您所需要做的,則您無需爲每個按鈕設置IBOutlet

0

就你而言,我會爲標籤創建一個IBOutlet,併爲按鈕創建一個IBAut。標籤的IBOutlet將在用戶按下按鈕時更新文本。你IBAction爲會是這個樣子:

-(IBAction)digitPressed:(UIButton *)sender{ 

    //First you have to check if there is currently any text in the label 
    //If there is not, the below line of code is performed 
    NSString *textWithDigit = [[yourLabel.text] stringByAppendingString: sender.titleLabel]; 

    //This line updates the label's text 
    label.text = textWithDigit; 
} 

。我只會把相關IBActions和IBOutlets代碼(你需要一個IBOutlet爲以更新的文字標籤,你需要的IBAction爲更改標籤的文本到按下的數字);需要更多的代碼(需要檢查用戶當前是否正在輸入數字,代碼爲+, - ,*,/等操作的代碼),但這僅僅是一個開始。

希望這會有所幫助!

相關問題