[英]XIB file not loading from framework
我创建了可可触摸框架,在其中创建了UIViewController
类,该类在xib
文件中xib
ui。 我已经完成了xib和控制器文件(例如连接到控制器类的文件所有者)之间的必需绑定。
我已经在单独的项目中创建了另一个xib和控制器文件,作为普通的ios应用程序。 在那里,我试图呈现此ViewController,它将出现在屏幕上,但是当我尝试加载框架中存在的控制器时,只有黑屏出现在屏幕上。
我在xcode的build phases
copy bundle resources
添加了xib
文件。 但是当我在本地Pod安装框架时,我只能看到控制器文件以及其他swift
文件,而看不到xib
文件。
let oPController = OPController()
let oNav = UINavigationController(rootViewController: oPController)
controller.present(oNav, animated: true, completion: nil)
当框架包含xib
文件时,需要特别注意吗?
注意当我查看项目中已安装的Pod时,那里看不到任何xib文件。
尝试将其添加到podspec文件
s.source_files = "ReusableViewController/*.{swift,h,m,xib,storyboard}"
s.resource_bundles = {
'MyFramework' => ['Pod/Classes/**/*.{storyboard,xib,xcassets,json,imageset,png}']
}
s.exclude_files = "Classes/Exclude"
s.swift_version = "4.0"
检查此链接以从框架加载您的xib文件
https://github.com/Ajithram007/reusableVC
let nibName: String = "SignInView"
var view: UIView!
public override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
self.view = UINib(nibName: self.nibName, bundle: Bundle(for: type(of: self))).instantiate(withOwner: self, options: nil)[0] as! UIView
self.view.frame = bounds
self.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(self.view)
}
在框架中使用xib创建任何ViewController时。 您必须做这些事。
如果使用cocoapod库,请确保已将xib
添加为podspec文件中的资源。
根据Sulthan的回答并进行了测试,当使用xib动态加载任何UIViewController
类且某个类存在于某个框架中时,则必须在动态加载类时显式提供bundle的上下文
像这样打电话
let oPController = OPController(nibName: "OPController", bundle:
Bundle(for:OPController.self))
这个班级看起来像
class OPController : UIViewController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.