为添加边框的 UIView 创建子类的步骤是啥? [复制]

Posted

技术标签:

【中文标题】为添加边框的 UIView 创建子类的步骤是啥? [复制]【英文标题】:What is the steps to create a subclass for UIView that adds border? [duplicate]为添加边框的 UIView 创建子类的步骤是什么? [复制] 【发布时间】:2016-10-17 08:58:09 【问题描述】:

在我当前的项目中,我经常创建一个 UIView 来在视图上放置一个灰色矩形。我通常在布局上先放白色视图,然后在viewDidLoad() 中设置所有边框。现在我决定通过编写一个自动设置视图边框的子类来加快速度,然后将所有这些视图设置为使用该子类。但我不知道把这段代码放在子类的什么地方:

self.layer.borderWidth = 2;
self.layer.borderColor = UIColor.grayColor().CGColor;

我要把它放在override init() 上吗?我是否需要为 UIView 覆盖 init 的每个版本?或者有更好的方法吗?

谢谢。

PS:如果还有什么方法可以让边框在故事板设计时立即显示(我认为这与drawable 有关,但我完全不明白),我'将不胜感激!

编辑:

从接受的答案,我得到这个答案:https://***.com/a/33721647/3003927 基本上是这样的:

import UIKit

class MyView: UIView 
  override init(frame: CGRect) 
      super.init(frame: frame)
      didLoad()
  

  required init?(coder aDecoder: NSCoder) 
    super.init(coder: aDecoder)
    didLoad()
  

  convenience init() 
    self.init(frame: CGRectZero)
  

  func didLoad() 
    //Place your initialization code here
    self.layer.borderWidth = 2;
    self.layer.borderColor = UIColor.grayColor().CGColor;
  

【问题讨论】:

【参考方案1】:

您需要创建 UIView 的子类并根据您的需要在此类中声明 IBInspectable 属性。

试试下面的链接作为例子:

http://nshipster.com/ibinspectable-ibdesignable/

https://www.captechconsulting.com/blogs/ibdesignables-in-xcode-6-and-ios-8

【讨论】:

我明白了,所以它是可检查/可设计的,而不是可绘制的,哈哈。我现在正在检查它。谢谢!【参考方案2】:

这里有一个非常详细的答案:

Proper practice for subclassing UIView?

基本上,您应该覆盖:

init?(coder aDecoder: NSCoder)init(frame: CGRect) 以及 awakeFromNib()。只需从您设置边界的那里调用另一个函数。

【讨论】:

谢谢!从您的链接真正成为我的解决方案的答案是:***.com/a/33721647/3003927 在初始化框架和初始化编码器上都调用了didLoad() 函数。

以上是关于为添加边框的 UIView 创建子类的步骤是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在哪个观点周期中将子视图添加到 UIView 子类的通用“经验法则”是啥?

只使用Quartzcore / layer为UIView添加顶部边框?

从它自己的 UView 子类中添加 UIView 作为 SuperView 子视图

如何同时向 UIView 添加顶角、顶边框和顶阴影

报告 UIView 子类所需大小的正确方法是啥?

为笔尖启动的视图添加边框和阴影