【问题标题】:programmatically customize UIView in xib在 xib 中以编程方式自定义 UIView
【发布时间】: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() 函数?

标签: ios swift xib


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

self.view.backgroundColor = [UIColor redColor];

希望这会有所帮助。

【讨论】:

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

    Set files owner

    1. 将文件的视图拖入 .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)
      }
    }
    
    1. 现在您可以直接在 Interface Builder 中使用您的子类

    Custom view in Interface Builder

    1. 或以编程方式

    Custom view programatically

    let view = CustomView()
    

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2011-11-11
      • 2015-05-25
      • 2015-04-17
      • 1970-01-01
      相关资源
      最近更新 更多