1

我正在构建一个自定义控件,如下图所示。

在此处输入图像描述

它基本上是一个带有滑块的菜单。箭头将允许我更改滑块轨道上的三天显示。根据我使用滑块选择的那一天,我想更改主屏幕上的一些视图(此菜单将在我的页面底部)。所以基本上这是我在主控制器中“听”的唯一事情:如果选择了某一天。

我已经弄清楚了我必须编写的所有代码,但我不确定我是否应该继承 UIControl 或 UIView。如果是这样,我应该在 UIControl (UIView) 中在哪里编写控制器的代码(更改日期、添加拖动效果等)?或者我应该继承 UIViewController,并在那里编写所有代码。(但如果是这样,我为什么要以第一种方式继承 UIControl (UIView))。

所以基本上我想知道我需要创建哪些额外的文件,除了我的自定义控件的视图界面(我在 IB 中做的),我应该把代码放在哪里(IBOutlets,IBAction 方法)以及我如何与主视图控制器(我将主控制器设置为我的自定义控件的代表?)。

对不起,很长的帖子。

谢谢

4

2 回答 2

4

我建议子类化UIControl。此控件的用户可以[yourControl addTarget:self action:@selector(someMethod:) forControlEvents:UIControlValueChanged];对更改的值做出反应。在您的控制下,当您确定选择了新的一天时,您打电话[self sendActionsForControlsEvents:UIControlValueChanged];,瞧,所有感兴趣的课程都会得到通知。

使该控制尽可能独立。这意味着,只给它尽可能多的逻辑,仅此而已。想想你如何使用 Apple 提供的 UI 元素:尽量让你的 UI 元素通用(如果可行;在这里使用常识)。简而言之:您应该努力使此控件足够通用,以便在其他项目或应用程序的其他地方对您有用。

于 2012-02-22T14:45:38.710 回答
2

简短的回答是你应该继承UIControl并放置所有逻辑来绘制组件并在那里与组件交互。UIControl继承UIView并添加目标/动作行为。这样您就可以随时sendAction:to:forEvents:更改UIControlEventValueChanged日期。

您也可以在用户更改所选日期时实施委托协议。

例如:

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

您不想使用 aUIViewController因为它的工作是管理更高级别的视图,例如您的小部件所在的屏幕。稍后您将在使用组件时使用视图控制器,并执行诸如设置初始显示日期和侦听更改事件之类的操作。

于 2012-02-22T14:42:31.967 回答