I was trying to figure out how to create a custom view using xib files. In this question the next method is used.
NSBundle.mainBundle().loadNibNamed("CardView", owner: nil, options: nil)[0] as! UIView
Cocoa has the same method,however, this method has changed in swift 3 to loadNibNamed(_:owner:topLevelObjects:), which returns Bool, and previous code generates "Type Bool has no subscript members" error, which is obvious, since the return type is Bool.
So, my question is how to a load view from xib file in Swift 3
First of all the method has not been changed in Swift 3.
loadNibNamed(_:owner:topLevelObjects:)
has been introduced in macOS 10.8 and was present in all versions of Swift. HoweverloadNibNamed(nibName:owner:options:)
has been dropped in Swift 3.The signature of the method is
so you have to create an pointer to get the array of the views on return.
Edit: I updated the answer to filter the
NSView
instance reliably.In Swift 4 the syntax slightly changed and using
first(where
is more efficient:I wrote an extension that is safe and makes it easy to load from nib:
Then just use like this:
Whether
CustomView
is aNSView
subclass and alsoCustomView.xib
.Swift 4 version of @vadian's answer