在 xib 中以编程方式自定义 UIView

Posted

技术标签:

【中文标题】在 xib 中以编程方式自定义 UIView【英文标题】:programmatically customize UIView in xib 【发布时间】:2015-08-10 12:26:46 【问题描述】:

我创建了一个带有 UIView 的 Xib 文件,然后创建了一个连接到 xibs 文件所有者的自定义 UIView 类。但是我不确定如何以编程方式创建一些东西。我尝试添加 awakeFromNib 函数,但它似乎无法运行,应该实现什么方法才能以编程方式更改 backgroundColor?

func loadViewFromNib() -> UIView 

    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "MediaPlayer", bundle: bundle)
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

    return view

【问题讨论】:

视图在使用时是如何被初始化的?它们是使用 .xib 初始化还是使用 init() 函数? 【参考方案1】:

awakeFromNib 只有在像这样调用UINib 时才会被调用:https://***.com/a/25513605/846780

【讨论】:

你确定let view 不为零吗? 不是真的,但是它在视图中显示了我的 xib 文件,所以我猜它不是? 所以你需要调查.. 你所做的应该调用override func awakeFromNib() 方法。 developer.apple.com/library/mac/documentation/Cocoa/Reference/…【参考方案2】:

你可以改变任何这样的背景颜色。

self.view.backgroundColor = [UIColor redColor];

希望这会有所帮助。

【讨论】:

【参考方案3】:
    创建您的自定义视图 .xib 文件 创建 UIView 的 .swift 文件子类 将文件的所有者设置为您的子类

Set files owner

    将文件的视图拖入 .swift 文件并命名为 contentView

Connect IBOutlet

您的 UIView 子类应如下所示:

class CustomView : UIView 


  @IBOutlet weak var contentView: UIView!



  override init(frame: CGRect) 
    super.init(frame: frame)
    setup()
  

  override func awakeFromNib() 
    super.awakeFromNib()
    setup()
  

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

  func setup() 
    Bundle(for: CustomView.self).loadNibNamed(String(describing: CustomView.self), owner: self, options: nil)
  

    现在您可以直接在 Interface Builder 中使用您的子类

Custom view in Interface Builder

    或以编程方式

Custom view programatically

let view = CustomView()

【讨论】:

以上是关于在 xib 中以编程方式自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中以编程方式从 UIView 中删除安全区域?

xcode - 将 xib 文件附加到自定义 UIView 类时出错

Swift:以编程方式附加自定义 UIView

自动布局:使用 UIWebViews 自定义 UIView 高度约束

为UIView自定义Xib

加载链接到 xib 的自定义 UIView 的最佳方法