2012-01-24 14 views
0

假設您有2個UISwitch對象放置在您的故事板上。他們每個人都可以處於開啓或關閉狀態。如何在僅設置一個IBAction時在代碼中識別UISwitch實例?

enter image description here

進一步假設IBAction是設置與代碼鏈接故事板:

- (IBAction)activityTurnedOn:(UISwitch*) activitySwitch; 

問: 有沒有一種辦法可以識別每個許多UISwitch對象我使用的,要知道,在代碼中,哪一個剛打開或關閉?有可以通過Interface Builder分配的屬性,我可以在代碼中測試嗎?

回答

1

我認爲你不能爲這些開關指定不同的網點。

  • (這不是破解)您可以爲每個屬性分配「tag」屬性並在activityTurnedOn:方法中檢查它。
  • (這是一個黑客)你也可以檢查一些奇怪的參數,如開關的y位置。
  • (也許這是不可能的)你可以創建UISwitch的幾個子類併爲交換機分配不同的類。
+0

我喜歡這個。我怎麼能從界面生成器做到這一點? – JAM

+0

https://skitch.com/bealex/g5cwk/screen-shot-2012-01-24-at-8.30.37-pm – bealex

+0

СпасибоСаш,большое – JAM

1

是的,在界面生成器設置的對象標籤,那麼您可以在代碼檢索此:if (activitySwitch.tag == 1) ...

1

您有每個開關作爲插座,然後檢查您的插座變量是否爲activitySwitch ==。我發現這使得代碼更易讀,而不是使用標籤,而且通常最終都希望從其他地方改變交換機的狀態,所以最終你需要插座。

0

您可以在.h文件中指定2個IBOutlets,像這樣:

IBOutlet UISwitch *firstSwitch; 
IBOutlet UISwitch *secondSwitch; 

,並在你的方法做到這一點:

- (IBAction)activityTurnedOn:(UISwitch*) activitySwitch { 
if (activitySwitch == firstSwitch) { 

} else if (activitySwicth == secondSwitch) { 

} 
} 

或者你可以在你的筆尖標記指定給你的交換機文件(因爲它們來自UIView)並且這樣做:

- (IBAction)activityTurnedOn:(UISwitch*) activitySwitch { 
if (activitySwitch.tag == yourFirstSwitchTag) { 

} else if (activitySwicth.tag == yourSecondSwitchTag) { 

} 
} 
+0

我試圖避免不得不爲每個對象使用單獨的'IBOultet'。 – JAM

+1

我還沒有寫完我的答案。現在檢查。 –

相關問題