iOS自定义控件

时间:2012-02-22 14:34:58

标签: iphone ios5 uicontrol

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

enter image description here

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

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

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

很抱歉这篇长篇文章。

由于

2 个答案:

答案 0 :(得分:4)

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

尽可能保持控制权。这意味着,只需要根据需要提供尽可能多的逻辑,仅此而已。想想你如何使用Apple提供的UI元素:尽量使你的通用(如果实际的话;在这里使用常识)。简而言之:你应该茁壮成长,使这个控件足够通用,以便它对你在其他项目或应用程序的其他地方有用。

答案 1 :(得分:2)

简短的回答是你应该继承UIControl并将所有逻辑绘制成组件并与组件进行交互。 UIControl继承自UIView并添加了目标/操作行为。这样,只要日期发生变化,您就可以sendAction:to:forEvents: UIControlEventValueChanged

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

例如:

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

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