不知道从哪里开始继承 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 - 没有按预期工作
使用 json 在 python / django 中设置用户登录,但不知道从哪里开始