2009-11-10 39 views
1

我將在我的應用程序中的幾個地方使用datePicker。我不想用UIPickerViewDelegate和UIPickerDatasource的委託方法「混淆」每個viewController,再加上我會一遍又一遍地執行相同的委派方法。iPhone上的UIDatePickerView的自定義包裝類

每次玩日期選擇器時,它的唯一目的就是在屏幕的一半上滑動,讓用戶選擇一個日期然後再次消失。 我正在考慮一個實現了datePicker委託方法的包裝viewController(DatePickerViewController),然後做了一個NSNotification與用戶選擇的值,這再次被viewController實例化DatePickerViewController。 這會讓我成爲一個解耦的datePicker,並讓viewController實例化datePicker對DatePickerDelegate一無所知,但只知道可能會有包含NSDate的通知。對我來說似乎是理性的,就像我會用其他語言做的事情一樣。但請糾正我,如果我在這裏挖自己一個洞:)

當我開始打破這種情況下,我遇到了一些困難,我沒有非常有經驗的目標C和可可。 我可以構建一個viewController,它在viewDidLoad中提供了一個datePicker,運行這個會在屏幕的下半部分產生一個帶有datePicker的空白屏幕。如果我使用實例化(自定義)DatePickerViewController的viewController中的「presentModalViewController」,它當然會滑動並覆蓋整個屏幕。我希望用戶仍然可以看到一半的視圖。很像在iCal應用程序中設置事件的時間。 (除了他們將新的viewController推入堆棧)。啊,只是意識到我的意思就是當它滑入屏幕並覆蓋一半屏幕時,就像鍵盤一樣。

所以我想我的主要問題是:你可以建立一個viewController的行爲像添加到視圖時的鍵盤。但是,在添加的ViewController中執行所有這些操作,而不是在控制器中實例化視圖。

希望這是有道理的:)

謝謝

回答

1

(1)把在模型中的選擇器(編輯:應該是有模式)視圖。這是鍵盤如何實現的。 (2)選取器控制器/代表只應該控制模型視圖和選取器。

(3)在該委託創建兩個屬性,例如:

ID *目標; 選擇器選擇器;

和的方法等:

- (無效)sendPickerResultsTo:(ID)所述目標forSelector:(SEL)theSelector; (4)在顯示選取器模型視圖之前,將目標設置爲調用控制器,將theSelector設置爲調用控制器中的方法。您可以配置選擇器方法以傳遞任意數量的數據。它看起來是這樣的:

- (空)pickerResults:(NSArray的*)pickerResults; //只要它是一個對象可以傳遞任何值

[注:這是那種東西你定義一個協議,如果你用了很多]

(5)當你有選擇器值只是具有拾取器委託調用:

[self.target performSelector:theSelector withObject:anArrayOfPickerResults];

(5)適當的方法添加到需要喚起模型選擇器視圖和該控制器設置爲目標你顯示模型選擇器視圖之前的任何控制器。

這會給你,你可以連接到任何視圖並且可以發送其結果到實現與正確的簽名即方法實現協議的任意對象的自包​​含的模型選擇器視圖。

這基本上是自己做UIControls addTarget的版本:動作:forControlEvents:

+0

TechZen嗨 非常感謝你:) 有幾件事情我不明白;什麼是「模型視圖」? 我想結束CustomDatePicker.m和.h,實例化這個並將其添加到當前視圖將向上滑動一個datePicker並選擇一個日期將調用viewController eventHandler添加datePickerView。這意味着我只需要實現處理器方法並等待通知,不符合任何協議? 也許你的方式更好,但對我來說有點新,你能指出一個例子嗎?再次感謝。 – RickiG 2009-11-10 18:20:25

+0

我認爲他意味着模態視圖 - 這是一個視圖,它需要所有的輸入。其他視圖不會獲取用戶交互事件。 一個對話框(錯誤/警告),不會讓你點擊其他任何東西,直到你確認它是一個模態視圖的例子。 – 2009-11-10 23:26:51

+0

感謝小量:) 我去了一個搜索狂歡的「模型視圖」的思想有我還沒有看到一個神奇的UIView類型。(上了一個數十億「模型 - 視圖 - 控制器」結果) 我想用戶能夠在其他地方點擊,如鍵盤,沒有什麼阻止你這樣做。我嘗試在ActionSheet中包含一個Picker來獲得'幻燈片'動畫等,但是這確實會鎖定屏幕。 也許我應該嘗試構建視圖並執行我自己的動畫。 – RickiG 2009-11-10 23:38:34