Ios 无法将从XIB创建的自定义UIView子类强制转换为我需要的类(仅UIView)
我所做的是: 1) 创建了Ios 无法将从XIB创建的自定义UIView子类强制转换为我需要的类(仅UIView),ios,swift,xcode,uiview,xib,Ios,Swift,Xcode,Uiview,Xib,我所做的是: 1) 创建了.xib文件translationfowindow.xib: 2) 创建了包含以下内容的translationInfo.swift文件: import UIKit class TranslationInfoWindow: UIView { // MARK: - Initializers override init(frame: CGRect) { super.init(frame: frame) setupView
.xib
文件translationfowindow.xib
:
2) 创建了包含以下内容的translationInfo.swift
文件:
import UIKit
class TranslationInfoWindow: UIView {
// MARK: - Initializers
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
// MARK: - Private Helper Methods
// Performs the initial setup.
private func setupView() {
let view = viewFromNibForClass()
view.frame = bounds
// Auto-layout stuff.
view.autoresizingMask = [
UIViewAutoresizing.flexibleWidth,
UIViewAutoresizing.flexibleHeight
]
// Show the view.
addSubview(view)
}
// Loads a XIB file into a view and returns this view.
private func viewFromNibForClass() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
return view
}
@IBOutlet weak var avatarImageView: RoundedImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var usersLabel: UILabel!
}
3) 在这里,我尝试初始化我的自定义视图:
func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
// FIXME: There is a UIView but it doesn't want to be casted in TranslationInfoWindow
if let infoWindow = Bundle.main.loadNibNamed(
"TranslationInfoWindow", owner: view, options: nil)?.first as? TranslationInfoWindow {
return infoWindow
} else {
return nil
}
}
现在,如果我尝试运行该项目,我会出现以下错误:
我做错了什么
更新: 以下是xib的层次结构:
在Interface Builder中,您是否将Identity Inspector(左三)选项卡中的类名从UIView更改为自定义类名?
您应该将translationFoWindow.xib的正确类设置为IB中的translationFoWindow类型。请发布一个屏幕截图,说明xib树的外观。还要检查问题是否确实是在控制台中显示错误消息(如果有的话)。否则,log(类)
let view=nib.instantiate(withOwner:self,options:nil)。首先
@FernandoMazzon添加了xibclass func instanceFromNib()->UIView的层次结构{return UINib(nibName:“nib file name”,bundle:nil)。instantiate(withOwner:nil,options:nil)[0]as!UIView}看到了吗?你能记录bundle.main.loadNibNamed吗(“TranslationInfo窗口”,所有者:视图,选项:无)
?仅适用于“文件”所有者,不适用于“视图”尝试将自定义类的名称设置为此处的值。我相信这是缺少的部分。你确定吗?没有看到任何人建议在此处设置自定义类。我个人不使用所有者。你可以将插座绑定到视图本身,然后使用零所有者。显然,对于此类独立视图,请尝试循环如果类型与您的类相同,请选择正确的笔尖…而不是选择第一个。