如何修改 UIControl 框架

Posted

技术标签:

【中文标题】如何修改 UIControl 框架【英文标题】:How to modify UIControl framework 【发布时间】:2016-01-11 09:05:43 【问题描述】:

我正在使用这个框架HRColorPicker。我想在 Storyboard 的 Autolayout 中布局它的子视图,但无法弄清楚框架是如何工作的。

它的主类是UIControl 的子类,称为HRColorPickerView,具有3 个属性

@property (nonatomic, strong) IBOutlet UIView <HRColorInfoView> *colorInfoView;

@property (nonatomic, strong) IBOutlet UIControl <HRColorMapView> *colorMapView;

@property (nonatomic, strong) IBOutlet UIControl <HRBrightnessSlider> *brightnessSlider;

每个都有自己的类,每个都是选择器中的 3 个子视图之一。

我想用这个颜色选择器创建一个UIViewController。如果我只是制作一个普通的 UIView 并将其添加到 Storyboard 中的 UIViewController 并将其类型设置为 HRColorPickerView,我会得到默认的颜色选择器并且它工作得很好。该框架的作者说,这些属性是可定制的,甚至在 Storyboard 中有一个镜头。但我不知道如何将它们放入我的故事板中,以便我可以自定义它们。

但是,我想使用 Storyboard 通过 Autolayout 来布置子视图/属性。基本上,我想在 VC 中创建自己的视图,将它们设置为 3 种类型之一,然后在 Storyboard 中布置它们。当我将它们连接到 .h 文件时,我尝试将视图的类型设置为 3 个中的每一个,但是当我运行时,我遇到了崩溃,我认为我做得不对。我创建了 2 个UIViews 和 1 个UISlider,每个都作为 3 个属性之一。 UISlider 得到“无法识别的选择器”崩溃,这不应该发生,因为支持视图的类应该能够处理它。

这是我的 .h 文件,在 Storyboard 中,*colorPickerView 下面的 3 个属性是 *colorPickerView 的子视图。

@interface ColorPickerViewController : UIViewController 

@property (strong, nonatomic) IBOutlet HRColorPickerView *colorPickerView;
@property (strong, nonatomic) IBOutlet HRColorMapView *colorMap;
@property (strong, nonatomic) IBOutlet HRColorInfoView *colorInfo;
@property (strong, nonatomic) IBOutlet HRBrightnessSlider *brightSlider;

@end

【问题讨论】:

在你点赞的页面底部 (hayashi311.github.io/Color-Picker-for-ios) 描述了如何装扮 UI。 @dasdom 它确实说你可以,但是,它不知道如何去做。它显示的 UISlider 代码在我尝试时不起作用。 你有没有试过询问lib的作者? @dasdom 是的。不知道他多久检查一次。 【参考方案1】:

我不是作者,所以这些都是我的猜测。库代码有点混乱,因为协议与实际类共享相同的名称。

根据截图,添加一个UI组件并设置自定义类正确的做法。但是,我相信您的滑块发生的错误是由于HRBrightnessSliderUIControl 的子类,因此您不能将UISlider 拖入视图中。根据这个SO,你需要拖入另一个UIView

如果你真的想写自己的滑块,你可以通过遵循HRBrightnessSlider协议来拖动和使用UISlider

【讨论】:

谢谢,我会试一试,让你知道会发生什么。是的,协议名称要了我的命!

以上是关于如何修改 UIControl 框架的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略触摸事件并将它们传递给另一个子视图的 UIControl 对象?

设置 UIControl 的框架会更改视图边界,但不会更改它可以接收触摸的位置

UIControl.frame 属性的生命周期和有效性

如何使表格滚动工作:UIControl 内的 UITableView 内的 UIControl

你将如何重新实现 UIControl?它如何适应响应者链?

如何取消对子 UIControl 的触摸?