2012-02-22 171 views
1

我正在構建一個自定義控件,看起來像下圖中的那個。iOS自定義控件

enter image description here

這將主要是採用了滑蓋的菜單。箭頭將允許我更改滑塊軌道上顯示的三天。根據我使用滑塊選擇的那一天,我想在主屏幕上更改一些視圖(此菜單將位於我的頁面底部)。所以基本上這是我唯一會在我的主控制器中「聽」的東西:如果選擇了某一天。

我已經想通了所有的代碼,我將不得不寫,但我不知道我應該繼承UIControl或UIView。如果是這樣,我應該在UIControl(UIView)中編寫我的控制器的代碼(改變日子,添加拖動效果等)?或者我應該繼承UIViewController,並在那裏寫下所有的代碼。 (但如果是這樣,爲什麼我應該以第一種方式繼承UIControl(UIView))。

所以基本上我想知道什麼額外的文件,我需要創建,除了我的自定義控件的視圖界面(我在IB做的),我應該在哪裏放置代碼(IBOutlets,IBAction方法)以及如何做我與主視圖控制器進行通信(我將主控制器設置爲我的自定義控件的代表?)。

對不起,很長的文章。

感謝

回答

4

我推薦子類UIControl。此控件的用戶可以執行[yourControl addTarget:self action:@selector(someMethod:) forControlEvents:UIControlValueChanged];以對更改的值作出反應。在你的控制下,當你確定選擇了新的一天時,你可以致電[self sendActionsForControlsEvents:UIControlValueChanged];,然後所有感興趣的課程都會被告知。

保持該控件儘可能獨立。這意味着,只需要給它儘可能多的邏輯就可以了,除此之外別無其他。想想你如何使用蘋果提供的UI元素:儘量讓你的通用(如果可行的話;在這裏使用常識)。簡而言之:您應該茁壯成長,使其足夠通用,以便在您的應用的其他項目或其他地方對您有用。

+0

謝謝你的回答。我還有一個問題,我應該在哪個方法中添加我的初始化代碼(例如,如果我想創建一個UIGestureRecognizer)。 – Cosmin 2012-02-22 14:50:42

+0

您將有更多的成功發佈,作爲一個單獨的問題。乾杯。 – picciano 2012-02-22 18:44:21

+0

@Cosmin:如果手勢識別器對控件很重要(即控件需要它的功能),那麼你可以在你的控件的'initWithFrame:'中初始化它。或者,如果你有不同的指定初始化你有初始化手勢識別。 – DarkDust 2012-02-22 19:37:12

2

簡短的回答是,你應該繼承UIControl並把所有的邏輯來繪製組件,並與那裏的組件進行交互。 UIControl繼承自UIView並添加目標/動作行爲。每當日期發生變化時,您都可以用sendAction:to:forEvents:UIControlEventValueChanged這樣的方式。

您也可以爲用戶更改選定日期時實施委託協議。

例如:

@protocol DateSliderDelegate <NSObject> 
    - (void)dateSlider:(id)slider dateDidChange:(NSDate *)date fromDate:(NSDate *)oldDate; 
@end 

你不想使用UIViewController,因爲它的工作是管理上級的意見,這樣的小部件是在屏幕上。稍後當您使用組件時,您將使用視圖控制器,並執行諸如設置日期以最初顯示並監聽更改事件等事情。

+0

我明白了,非常感謝。 – Cosmin 2012-02-22 14:51:29