使用自定义 uiview xib

Posted

技术标签:

【中文标题】使用自定义 uiview xib【英文标题】:Using custom uiview xib 【发布时间】:2020-12-21 17:58:18 【问题描述】:

我正在尝试使用来自 xib 文件的自定义视图,但我不知道如何将情节提要中的占位符视图设置为等于 xib 之一。此外,我不能只将占位符 uiview 的属性设置为其中一个 xib,因为我需要能够在不同的 xib 之间切换。这是我目前所拥有的。

import UIKit  
class Viewcontroller: UIViewController 

    @IBOutlet weak var placeholderView: UIView!
    
    override func viewDidLoad() 
        super.viewDidLoad()
        
        placeholderView = view
    
    
    class func instanceFromNib() -> CustomView 
            let view = UINib(nibName: "CustomView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomView
            return view
    

【问题讨论】:

什么叫占位符视图? 占位符视图只是一个空的uiview 如果你用它来展示你的故事板会很有帮助。 好的,我加了截图 您的屏幕截图没有显示您称为占位符视图的东西的位置以及它如何连接到您的故事板。 【参考方案1】:

为您的 Xib 视图创建一个自定义类,您可以在其中加载 nib,如下所示:

class MyCustomView: UIView
override init(frame: CGRect) 
      super.init(frame: frame)
      commonInit()
  

  required init?(coder aDecoder: NSCoder) 
      super.init(coder: aDecoder)
      commonInit()
  
  
  private func commonInit()
      Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)
     
  

你可以在那里添加你需要的所有网点和东西。

情节提要中的视图必须是 Xib 视图的类型。在您的代码和情节提要中更改它:

@IBOutlet weak var placeholderView: MyCustomView!

来自故事板:

    点击查看 去找身份检查员 在课堂上写MyCustomView

【讨论】:

我的 xib 已经有一个类,我不想更改情节提要视图身份检查器的类,因为我需要能够使用不同的 xib,而不仅仅是一个 那么,使用更多视图并在不需要时隐藏它们。据我所知,您不能为一个对象分配多个类:***.com/questions/50727692/…【参考方案2】:

不要考虑将被其他视图替换的“占位符”视图,而是将其视为“容器”视图......您可以将 xib 的视图添加为子视图,就像添加任何其他子视图。

因此,当您想从 xib 显示视图时,您会:

从容器中移除当前子视图(如果已经存在) 从所需的 xib 加载视图 将其作为子视图添加到容器中 相对于容器设置约束

【讨论】:

以上是关于使用自定义 uiview xib的主要内容,如果未能解决你的问题,请参考以下文章

在 .xib 中使用自定义 UIView 作为 IBOutlet

如何借助 AutoLayout 在自定义 UITableviewCell 中添加自定义 UIView(xib)?

为啥自定义 xib 需要 UIView 属性

Xib 自定义 UIView 的实例化

在自包含的自定义 UIView 子类中使用 .xib 文件进行原型设计

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