代码之家  ›  专栏  ›  技术社区  ›  RickiG

iPhone上uidatepickerview的自定义包装类

  •  1
  • RickiG  · 技术社区  · 15 年前

    我将在我的应用程序中使用一个日期选择器。我不想用uipickerviewDelegate和uipickerdatasource的委托方法“混乱”每个视图控制器,而且我会一遍又一遍地执行相同的委托方法。

    每次玩日期选择器时,它的唯一目的就是在屏幕上滑动一半,让用户选择一个日期,然后再次消失。 我正在考虑一个实现了datepicker委托方法的包装视图控制器(datepickerview controller),然后使用用户选择的值执行nsnotification,这再次被实例化datepickerview控制器的视图控制器捕获。 这将使我成为一个分离的日期选取器,并让实例化日期选取器的视图控制器对日期选取器删除一无所知,但只知道可能会出现包含nsdate的通知。在我看来是理性的,就像我用其他语言做的一样。但如果我在这里挖了个洞,请纠正我:)

    当我开始打破这一点时,我遇到了一些困难,我在目标C和可可方面经验不足。 我可以构建一个viewcontroller,在它的viewdidload中显示一个datepicker,运行它会导致一个空白的白色屏幕,在屏幕的下半部分有一个datepicker。如果我从实例化(自定义)日期选择视图控制器的视图控制器中使用“PresentModalView控制器”,它当然会向上滑动并覆盖整个屏幕。我希望用户仍能看到一半的视图。很像在iCal应用程序中设置事件的时间。(除了将一个新的视图控制器推到堆栈上)。啊,我才意识到,我的意思是,当键盘滑入半屏时,它就和键盘一模一样。

    所以我想我的主要问题是:你能建立一个视图控制器吗,当它被添加到视图中时,它的行为就像键盘一样。但在添加的view controller中执行所有这些操作,而不是在实例化视图的控制器中执行这些操作。

    希望它有意义:)

    谢谢你

    1 回复  |  直到 15 年前
        1
  •  1
  •   TechZen    15 年前

    (1)将选择器置于模型(编辑:应为模式)视图中。这就是键盘的实现方式。

    (2)选取器控制器/委托应仅控制模型视图和选取器。

    (3)在委托中创建两个属性,例如:

    ID*目标; 选择选择器;

    还有一种方法,比如:

    -(void)sendpickerresultsto:(id)选择器的目标:(sel)选择器;

    (4)在显示选择器模型视图之前,将目标设置为调用控制器,将选择器设置为调用控制器中的方法。您可以配置选择器方法来传递任意数量的数据。它看起来像:

    -(void)pickerresults:(nsarray*)pickerresults;//只要是对象,就可以传递任何值

    [注意:如果你经常使用协议,这是你定义的一种协议]

    (5)当您有选取器值时,只需让选取器委托调用:

    [self.target performselector:theselector withobject:anarrayofpickerresults];

    (5)将适当的方法添加到任何需要调用模型选取器视图的控制器,并在显示模型选取器视图之前将控制器设置为目标。

    这将为您提供一个独立的模型选取器视图,您可以附加到任何视图,并且可以将其结果发送到任何实现具有正确签名的方法(即实现协议)的任意对象。

    这基本上是一个自己动手的uicontroladdTarget:action:forcontrolEvents版本: