xib에서 IBDesignable을 위한 사용자 정의 보기를 정의할 때 NSBundle에 주의하십시오.
Create an IBDesignable UIView subclass with code from an XIB file in Xcode
일.
xib에서 사용자 정의 보기를 만들고'파일 생성기'클래스에 클래스 이름을 지정합니다.
이.
사용자 정의 보기를 실현하는 클래스 (파일 소유자에 지정된 클래스)
nib에서 보기
addSubview()
를 불러옵니다. 이때 코드에서 온 초기화용 초기화기init(frame: CGRect)
와nib에서 온 초기화용 초기화기가 모두 진행됩니다.MyView.swift/Swift2
import UIKit
@IBDesignable class MyView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
loadFromNib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadFromNib()
}
private func loadFromNib() {
// ここは UINib を使っても良い
let v = NSBundle(forClass: self.dynamicType).loadNibNamed("MyView", owner: self, options: nil).first as! UIView
addSubview(v)
v.translatesAutoresizingMaskIntoConstraints = false
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[view]-0-|",
options: NSLayoutFormatOptions(rawValue: 0),
metrics: nil,
views: ["view" : v]))
addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[view]-0-|",
options: NSLayoutFormatOptions(rawValue: 0),
metrics: nil,
views: ["view" : v]))
}
}
MyView.swift#loadFromNib()// Swift3
let v = Bundle(for: type(of: self)).loadNibNamed("MyView", owner: self, options: nil)?.first as! UIView
addSubview(v)
// Case1. SnapKit
v.snp.makeConstraints { (maker: ConstraintMaker) in
maker.edges.equalTo(self)
}
// Case2. NSLayoutConstraint
v.translatesAutoresizingMaskIntoConstraints = false
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[view]-0-|",
options: NSLayoutFormatOptions(rawValue: 0),
metrics: nil,
views: ["view" : v]))
addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[view]-0-|",
options: NSLayoutFormatOptions(rawValue: 0),
metrics: nil,
views: ["view" : v]))
삼.
스토리보드 등 다른 nib에 UIVIEW의 템플릿을 배치한 뒤
2
제작한 반(이번에는 마이 비) 으로 명명했다.순조롭게 진행되면 빌딩이 자동으로 주행Designables Up to date
해 외관을 반영한다.참고: NSBundle은 mainBundle()를 사용하여 초기화하지 않습니다.
mainBundle()
는 현재 실행 중인 응용 프로그램의 묶음을 반환하는 방법이지만 IBDesignable는 목표 응용 프로그램이 아니라 IBDesignables Agent Cocoa Touch라는 Xcode의 보조 프로그램 형식으로 실행되기 때문에 mainBundle()
에서 얻은 묶음과는 다른 실례이다.(극단적으로 말하면 Interface Builder 자체가 iOS 에뮬레이터와 같다.)따라서 대신 클래스 이름에서 실례를 묶는 방법을 사용한다.self.dynamicType
는 Objective-C가 말한 [self class]
에 해당한다.정확한 묶음을 얻다
NSBundle(forClass: self.dynamicType)
UINib 사용 시// "bundle: nil" はメインバンドルを指す
UINib(nibName: "MyView", bundle: NSBundle(forClass: self.dynamicType))…
구문: xib에서 사용자 정의 UIVIew를 만드는 방법
Reference
이 문제에 관하여(xib에서 IBDesignable을 위한 사용자 정의 보기를 정의할 때 NSBundle에 주의하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/usagimaru/items/e1c349c5bc51a1c4a92c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)