2009-11-10 38 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