我知道IBAction和IBOutlet之間的差異,但我不知道什麼時候應該使用一個。什麼時候應該使用IBOutlet而不是IBAction?
例如,我試圖製作一個計算器。我有十個按鈕和一個標籤來顯示結果。我必須在我的界面中創建十個IBOutlets嗎?如果不是,爲什麼不呢?
我知道IBAction和IBOutlet之間的差異,但我不知道什麼時候應該使用一個。什麼時候應該使用IBOutlet而不是IBAction?
例如,我試圖製作一個計算器。我有十個按鈕和一個標籤來顯示結果。我必須在我的界面中創建十個IBOutlets嗎?如果不是,爲什麼不呢?
好吧,IBOutlets和IBActions有兩個獨立的目的。
IBActions基本上是可以通過IB連接到UI元素的方法。它們爲您的對象提供了在UI出現問題時得到通知的方式。它們在調用時還會提供sender參數,以便您可以訪問從方法內發送消息的UI元素。
另一方面,IBOutlet提供了一種在任何時候獲取對代碼中UI元素的引用的方法,當您需要更改UI的各個方面時會使用它。
對於您的情況,您並不需要爲按鈕設置IBOutlets,因爲您無需更改任何關於它們的任何內容,只需在按下按鈕時收到通知。作爲一個說明,如果你有很多按鈕,並且你出於某種原因需要通過代碼訪問它們來改變它們,我不推薦使用10個IBOutlets。相反,我會使用viewWithTag:
方法,並相應地設置每個按鈕標籤,以便您不必爲每個按鈕創建IBOutlet。
IBOutlet
是一個到對象的連接,而IBAction
是一個連接到要作爲回調調用的方法。例如,您可能有十個按鈕和一個標籤,但可以使用IBOutlet連接到標籤(以便您可以更新其值)以及連接到每個十個按鈕的onTouchUpInside
事件的單個功能- (IBAction)buttonPressed:(id)sender;
。然後,buttonPressed:
方法的實現將需要檢查sender
來確定它的價值。
如果這是您所需要做的,則您無需爲每個按鈕設置IBOutlet
。
就你而言,我會爲標籤創建一個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爲更改標籤的文本到按下的數字);需要更多的代碼(需要檢查用戶當前是否正在輸入數字,代碼爲+, - ,*,/等操作的代碼),但這僅僅是一個開始。
希望這會有所幫助!
+1撤消可笑downvote – 9dan
http://stackoverflow.com/questions/1643007/iboutlet-and-ibaction – 9dan
@ 9dan這是一種也許是一種重複。 – Vervious