swift - 如何在 placeholderView 上的 ViewController 中加载 nib
问题描述
我有一个有视图的视图控制器placeholder
,我也有一个nib
我想添加到该 placeHolderView 的自定义。我正在努力弄清楚如何在 viewController 中注册笔尖,以便当我推送到这个视图控制器时,占位符视图被我的笔尖替换。
这是我尝试过的:
国家视图控制器
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)
}
}
国家详情查看
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
}
}
解决方案
您可以添加静态方法。像下面
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)
}
推荐阅读
- curl - PHP 7.0.30 的卷曲不适用于 ubuntu 14.04(64 位)
- javascript - 通过缓存 xor indexedDB 响应获取请求
- wordpress - 如何减少 VPS 内存使用
- ios - iOS:我可以使用已经用 Adobe Animate 创建的 Texture Atlas 吗?
- javascript - 仅显示第一个自定义标签。海图
- c# - 如果句子不起作用,则剃刀查看
- java - Java 8:并行流等待所有线程完成任务
- python - 如何找到一个numpy数组的根
- node.js - Heroku 构建失败,“致命:不是 git 存储库”
- excel - 我尝试使用 excel 打开的 Whaetever 文件它在我之前所做的文件上启动相同的宏,IM LOST