UIView子类的Swift通用方法

时间:2018-09-13 10:51:28

标签: ios swift generics uicontrol

我想为所有控件(例如UIButtonUILabelUIViewUITextView)创建通用方法,以便为每个控件画下划线。

是否可以为上述类编写这样的方法?

2 个答案:

答案 0 :(得分:2)

由于所有元素都继承自UIView,因此可以尝试

extension UIView {
 func addUnderline() {
   // create underline view add it with addSubview
 }
}

您可以从任何元素中调用它

UIButton().addUnderline()
UILabel().addUnderline()

以此类推

答案 1 :(得分:2)

如果您真的想使用Swift泛型,则可以编写如下内容:

func addUnderline<V>(inView view: V, withHeight height: CGFloat, andColor color: UIColor) where V: UIView {
    let underlineHeight: CGFloat = height
    let underlineView = UIView(frame: CGRect(x: 0, y: view.frame.height - underlineHeight, width: view.frame.width, height: underlineHeight))
    underlineView.backgroundColor = color
    view.addSubview(underlineView)
  }