不知道从哪里开始继承 UIControl!

Posted

技术标签:

【中文标题】不知道从哪里开始继承 UIControl!【英文标题】:Can't figure out where to start subclassing a UIControl! 【发布时间】:2009-08-25 17:46:29 【问题描述】:

我想创建我自己的控件,该控件将由几个 UILabel 和几个 UITextFields 组成。问题是我不知道从哪里开始!我是否直接继承 UIControl,然后创建我的子视图并将它们添加到 init: 中的主视图中?还是我使用 layoutSubviews?我需要覆盖drawRect:吗?

我习惯于创建“控制器”类来处理添加子视图,但如果我将 UIControl 子类化,那么我不确定要覆盖哪些方法来进行设置!

我以前从未这样做过,所以我真的很感激一些指点!

干杯!

【问题讨论】:

【参考方案1】:

你确定要UIControl吗? UIControl 类旨在用于相当简单、通常可重用的控件,例如需要支持一组有限事件(如“触摸”或“值更改”)的按钮和文本字段。如果您只是想创建一种将多个视图组合在一起的方法,您应该改用UIView

无论哪种情况,您都应该这样做:

    创建您的子视图并在-initWithFrame: 中设置它们的大部分属性。将它们保存在实例变量中,并将它们添加为 self 的子视图。

    -layoutSubviews 中设置它们的帧,根据self.bounds 计算它们。这将在您的视图更改大小时调用,包括在-initWithFrame: 之后。

除非您需要使用 Core Graphics 函数进行自定义绘图,否则您不需要实现 -drawRect:

【讨论】:

如果你在initWithFrame中添加UILabel之类的子视图,在layoutSubviews中设置框架,是不是意味着你不能使用drawRect进一步添加UI元素,比如在UILabel下面画一条线? 您可以使用-drawRect: 进行自定义Core Graphics(或现在,UIBezierPath)绘图。但是,此图形将位于所有子视图下方——如果您的子视图不透明,-drawRect: 图形将不可见。例如,对于 UILabel,您需要确保其 backgroundColor[UIColor clearColor] 并且其 opaque 属性设置为 NO

以上是关于不知道从哪里开始继承 UIControl!的主要内容,如果未能解决你的问题,请参考以下文章

Swift:UIScrollView 和 UIControl - addTarget | addGestureRecognizer - 没有按预期工作

去除 FOP 内联元素中的空格

Mysql 函数 - 不知道从哪里开始

使用 json 在 python / django 中设置用户登录,但不知道从哪里开始

CloudKit 作为使用常规网络主机的 CMS,不知道从哪里开始?是不是可以?

UIControl及其子类