2010-04-10 106 views
0

我有(兩者都引用網點)兩大UISliders的價值Changed事件連線了以下方法:如何確定哪個控件觸發了一個事件?

-(IBAction) sliderMoved:(id) sender {} 

如何確定哪些滑很感動,這樣我可以得到它的價值和更新相應的標籤?或者有兩個單獨的事件會更簡單,每個滑塊一個事件?第二個選項似乎對我來說是不必要的複製。

乾杯, 丹

+1

你應該閱讀Cocoa Bindings。只需將標籤和滑塊綁定到相同的值即可。 – NSResponder 2010-04-12 02:18:15

+0

這聽起來很有用;謝謝。順便說一句,好名字! – 2010-04-12 15:12:37

回答

1

如果您設置了滑塊,您可以使用[發件人標籤]獲取滑塊的標籤。在創建滑塊時或在界面構建器中分配標籤。

-(IBAction) sliderMoved:(UISlider*)sender { 
switch ([sender tag]) { 
case kMyOneSlider: ... break; 
case kMyOtherSlider: ... break; 
} 
} 

您可以使用==與出口成員每個滑塊:

-(IBAction) sliderMoved:(UISlider*)sender { 
if (sender == mOneSlider) ...; 
if (sender == mOtherSlider) ...; 
} 

或者,你可以設置每個滑塊不同的動作。如果處理程序中有一些通用代碼,我通常會共享一個操作方法。

+0

這是官方的「答案」,因爲它更直接簡潔地回答了我的問題。 – 2010-04-11 03:50:29

4

這將是sender變量。只需做所有的工作就可以了。

順便說一下,強行輸入它是合法的。所以如果你知道你只打算處理UISlider對象,你可以做-(IBAction)someAction:(UISlider*)slider {}

+0

這很好,我猜ID是相當於一個C#對象類型?但問題仍然存在 - 是否有一種令人愉快的方式可以確定觸發事件的兩個滑塊中的哪一個? – 2010-04-10 03:02:11

+2

您可以使用==運算符來比較'sender'對象和已知滑塊的指針。對於'id'類型,它就像C#的''object'類型,只是編譯器會假定對_all_方法的調用將會成功(因此對於任何調用都不會發出警告)。 – zneak 2010-04-10 03:14:29

+0

非常感謝您的幫助。 – 2010-04-10 03:23:48

相關問題