使用 UIViewController 子类自定义 iPhone 控件
Posted
技术标签:
【中文标题】使用 UIViewController 子类自定义 iPhone 控件【英文标题】:Custom iPhone control using UIViewController subclass 【发布时间】:2009-09-09 14:04:43 【问题描述】:我想要一个像 UISlider 这样的控件,但它有两个拇指而不是一个,因此您可以指定一个范围而不是一个值。我阅读了其他人在寻找相同的东西,关于制作新控件的建议在我脑海中浮现。
所以我决定在 nib 中设置我想要的东西,然后创建一个视图控制器来处理它的行为。它实际上工作得很好这种方式接受两件事。
1) 要将我的“自定义控件”加载到另一个笔尖,我需要通过这样的代码来完成...
MaxMinSliderViewController *feeMaxMinSlider =
[[MaxMinSliderViewController alloc] init];
[self.view addSubview:feeMaxMinSlider.view];
feeMaxMinSlider.view.frame = CGRectMake(20, 20, 280, 54);
...而不是像普通的 IB 控件那样拖放到其他 nib 中。有没有简单的方法可以做到这一点?
2) 在我所有关于这样做的阅读中,似乎我应该(以正确的方式)子类化 UIView 而不是 UIViewController。我无法正确设置 UIView 并使其正常工作。
想法?
【问题讨论】:
很遗憾,没有,但是从那时起已经有几个版本的 XCode 和 ios,所以也许它已经被添加了。虽然怀疑。 【参考方案1】:而不是拖放到 其他笔尖,如普通 IB 控件。是 有一个简单的方法可以做到 这个?
不!只有an incredibly hard way!
【讨论】:
【参考方案2】:假设您设法将您的类转换为自定义 UIView 而不是 UIViewController,您可以在 Interface Builder 中轻松完成其中的一部分(取决于您的自定义控件具有哪种 init 方法)。
在 Interface Builder 中,将一个普通的旧 UIView 从库窗口拖放到您的视图上,并根据需要对其进行定位/调整大小。
然后选择 UIView,切换到 Inspector Window 的 Identity 选项卡(带有小 (i) 图标的选项卡)并将其从 UIView 更改为自定义类的名称。这会导致在加载 NIB 时实例化您的自定义类的实例,而不是一个空的 UIView。
然后您可以像往常一样将视图连接到 IBOutlet 等。
这种方法的优点是能够在视觉上定位和调整控件的大小等。但是它确实只显示为一个矩形,并且您无法像使用图形一样配置控件的其他属性UIButton 或 Interface Builder 额外支持的类似控件。
我觉得这种技术很棒,因为我不是一个视觉思考者,而且当我阅读一段包含大量 frame = CGRectMake(20, 20) 的代码时,我很难想象事情会是什么样子, 280, 54) 等。能够用鼠标直观地做到这一点对我来说要好得多。
【讨论】:
【参考方案3】:有一个Interface Builder Plug-in Programming guide,但它只提到了 Mac OS X,而不是 iPhone。
此外,从 XCode 3.2.1 开始,只有一个用于创建 Mac OS X IB 插件的新项目模板; iPhone (Cocoa Touch) 没有这样的项目模板。所以我的猜测是这不适用于 iPhone。
【讨论】:
以上是关于使用 UIViewController 子类自定义 iPhone 控件的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用传递不同 UIViewController 子类的相同方法吗?