Сделал UIView: .xib файл, указал в File's Owner название класса наследника от UIView.
Затем сделал инициалзацию
@IBDesignable class Search: UIView {
var view = UIView()
var nibName = "Search"
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
// setup the view from .xib
view = loadViewFromNib()
view.frame = self.bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView {
// grabs the appropriate bundle
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: nibName, bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
Все шаги как по туториалу. Этот UIView реализует поиск, а следовательно мне потребовалось сделать outlet UITextField и настроить его
@IBOutlet weak var searchField: UITextField!
@IBInspectable var hint : String {
get {
let value = searchField.placeholder
return value == nil ? "" : value!
} set {
configureSearchField(newValue)
}
}
func configureSearchField(name : String) {
searchField.attributedPlaceholder = NSAttributedString(string: name, attributes: [
NSFontAttributeName: UIFont(name: "OpenSans-Semibold", size: 12.0)!,
NSForegroundColorAttributeName: UIColor.blackColor()
])
}
Есть ещё параметры, которые хотелось бы учесть, но на этом моменте я поймал unexpectedly found nil while unwrapping an Optional value на попытке обратиться к UITextField, следовательно он не инициализируется должным то образом до обращения к нему. Предвосхищая вопросы могу сказать
File's Ownerу меня указан корректно- nibName соответствует названию файла в проекте
- В Connections Inspector нет никаких варнингов или ошибок, связь сделана правильно
Что я мог упустить?