2011-05-03 97 views
0

我有一個uiviewcontroller。在這個視圖中,有一個按鈕,當點擊該按鈕時,它應該彈出,如「對話框」,它要求用戶輸入一些值。一旦用戶輸入值,它會有另一個自定義(帶背景圖像)「確認診斷框」,它有2個按鈕,是和否。這個「確認對話框」可能會被其他類重新使用。我已閱讀關於「委託和數據源」的蘋果文檔以及關於委託功能的幾個問題,但我仍不確定是否應使用委託功能。有什麼想法嗎?爲彈出消息創建自定義委託函數或自定義UIView?

回答

1

代表是非常有用的,但他們與協議齊頭並進。協議允許您定義一種「合約」來確保委託人對這些方法做出響應。例如,您可以添加一個名爲UIConfirmBoxDelegate協議,並有一個方法:然後

- (void)confirmBox:(UIConfirmBox*)box didChoose:(ButtonEnum)button; 

您的委派對象必須同時實現您的協議和這種方法。第一個參數是發送委託消息的對象(它似乎是約定,在這方面非常有用),第二個參數是枚舉值,指示哪個按鈕被點擊。這應該允許您在未來輕鬆添加更多按鈕(可能是,否,取消?)。

您可以(也可能應該)read more about protocolsdefining enums(這是上述方法的第二個參數)。


要回答在評論一個新的問題:如何使用代表團獲得UISlider的價值。您可以使用每次操縱滑塊時觸發的委託。只要有一個新的委託功能,如:

- (void)confirmBox:(UIConfirmBox*)box didChangeSlider:(UISlider*)slider; 

和確認框和滑塊「整體出售」傳遞給委託做需要。如果你不想傳遞一個指針到整個滑塊,你也可以讓它傳遞值。只需將該消息發送給IBAction內的代理人,以響應您的滑塊值更改,並且您應該設置爲繼續。

+0

+1代表團。 Objective-C鼓勵最好的設計模式之一。 – Sam 2011-05-03 05:41:23

+0

不錯!在確認框中,我有一個用戶輸入值(我使用UISlider獲取他/她想購買的物品數量)?我如何得到這個價值? – 2011-05-03 06:06:12

+0

答覆已更新。 – 2011-05-03 06:22:53