使用UIViewController子类自定义iPhone控件

时间:2009-09-09 14:04:43

标签: iphone uiviewcontroller interface-builder

我想要一个像UISlider这样的控件,但是用两个拇指代替一个拇指,这样你就可以指定一个范围而不是一个值。我读到了寻找同样事情的其他人,并提出了关于制作新控件的建议。

所以我决定在笔尖中设置我想要的东西,然后创建一个视图控制器来处理它的行为。它实际上非常好用这种方式接受2件事。

1)要将我的'自定义控件'加载到另一个笔尖,我需要通过这样的代码来完成...

MaxMinSliderViewController *feeMaxMinSlider = 
    [[MaxMinSliderViewController alloc] init];
[self.view addSubview:feeMaxMinSlider.view];
feeMaxMinSlider.view.frame = CGRectMake(20, 20, 280, 54);

...而不是像普通IB控件那样拖放到其他笔尖中。有没有一种简单的方法可以做到这一点?

2)在我关于这样做的所有阅读中,似乎我应该(以正确的方式做)子类UIView而不是UIViewController。我无法正确设置UIView并让它正常工作。

思想?

3 个答案:

答案 0 :(得分:3)

  

而不是拖放   其他笔尖像正常的IB控件。是   有一种简单的方法可以做到   此?

都能跟得上!只有an incredibly hard way

答案 1 :(得分:2)

假设您设法将您的类转换为自定义UIView而不是UIViewController,您可以在Interface Builder中轻松完成部分操作(取决于您的自定义控件具有哪种init方法)。

在Interface Builder中,将一个普通的旧UIView从“库”窗口拖放到视图中,并根据需要定位/调整它。

然后选择UIView,切换到检查器窗口的标识选项卡(带有小(i)图标的选项卡),并将其从UIView更改为自定义类的名称。这会导致在加载NIB时实例化自定义类的实例,而不是空的UIView。

然后您可以正常将视图连接到IBOutlet等。

这种方法的优点是能够在视觉上定位和调整控件等。但它只显示为矩形,并且您无法像以前那样以图形方式配置控件的其他属性。一个UIButton或类似的控件,Interface Builder对它有额外的支持。

我发现这种技术很棒,因为我不是那么多的视觉思考者,并且当我读到包含大量帧= CGRectMake(20,20)的代码段时,我觉得很难想象事情的样子,280,54)等。能够用鼠标直观地做到这一点对我来说要好得多。

答案 2 :(得分:0)

有一个 Interface Builder插件编程指南,但它只提到了Mac OS X,而不是iPhone。

此外,从XCode 3.2.1开始,只有一个用于创建Mac OS X IB插件的新项目模板; iPhone(Cocoa Touch)没有这样的项目模板。所以我的猜测是这不适用于iPhone。