我有一个具有placeholder
视图的视图控制器,还有一个我想添加到该placeHolderView的自定义nib
。我正在努力弄清楚如何在viewController中注册笔尖,以便在我推入该视图控制器时将占位符视图替换为我的笔尖。
这是我尝试过的:
CountryViewController
import UIKit
class CountryViewController: UIViewController {
@IBOutlet weak var mainView: UIView!
@IBOutlet weak var flagImage: UIImageView!
@IBOutlet weak var countryInfoViewPlaceHolder: UIView!
private let countryDetails: CountryData
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(countryName: countryDetails.name)
addSubView()
}
init(countryDetails: CountryData) {
self.countryDetails = countryDetails
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
return nil
}
func setUpNavBar(countryName: String) {
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
self.title = countryName
self.navigationController?.navigationBar.tintColor = UIColor.countryThemeGrey()
}
func addSubView() {
guard let nibView = Bundle.main.loadNibNamed("CountryDetailsView", owner: self, options: nil)?.first as? CountryDetailsView else {
return
}
countryInfoViewPlaceHolder.addSubview(nibView)
}
}
CountryDetailsView
class CountryDetailsView: UIView {
@IBOutlet weak var capitalLabel: UILabel!
@IBOutlet weak var regionLabel: UILabel!
@IBOutlet weak var subRegionLabel: UILabel!
convenience init() {
self.init(frame: .zero)
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
return nil
}
private func commonInit() {
// let nib = UINib(nibName: String(describing: type(of: self)), bundle: nil)
// contentView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
// addSubviewPinnedToEdges(contentView)
Bundle(for: CountryDetailsView.self).loadNibNamed("CountryDetailsView", owner: self, options: nil)
}
func setViewWithData(country: CountryData) {
capitalLabel.text = country.capital
regionLabel.text = country.region
subRegionLabel.text = country.subRegion
}
}
答案 0 :(得分:1)
您可以添加静态方法。像下面一样
class CountryDetailsView: UIView {
@IBOutlet weak var capitalLabel: UILabel!
@IBOutlet weak var regionLabel: UILabel!
@IBOutlet weak var subRegionLabel: UILabel!
static func initView() -> CountryDetailsView {
return Bundle(for: CountryDetailsView.self).loadNibNamed(String(describing: CountryDetailsView.self), owner: self, options: nil)!.first as! CountryDetailsView
}
func setViewWithData(country: CountryData) {
capitalLabel.text = country.capital
regionLabel.text = country.region
subRegionLabel.text = country.subRegion
}
}
使用:
func addSubView() {
let nibView = CountryDetailsView.initView()
countryInfoViewPlaceHolder.addSubview(nibView)
}