在 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 类时出错