我创建了可可触摸框架,并在其中创建了UIViewController
文件中的ui的xib
类。我已经完成了xib和控制器文件之间的必要绑定,例如文件所有者连接到控制器类。
我已经像普通的ios app在另一个项目中创建了另一个xib和控制器文件。在那里,我尝试将ViewController呈现在屏幕上,但是当我尝试加载框架中存在的控制器时,只有黑屏出现在屏幕上。
我在xcode的xib
的{{1}}部分中添加了copy bundle resources
个文件。但是当我在本地Pod安装框架时,我只能看到控制器文件以及其他build phases
个文件,而看不到swift
个文件。
xib
当框架包含let oPController = OPController()
let oNav = UINavigationController(rootViewController: oPController)
controller.present(oNav, animated: true, completion: nil)
个文件时,需要特别注意吗?
注意:当我查看项目中已安装的Pod时,在那里看不到任何xib文件。
答案 0 :(得分:0)
在框架中使用xib创建任何ViewController时。 您必须做这些事情。
确保使用cocoapod库时,已将xib
作为资源添加到podspec文件中。
根据Sulthan的答案并进行了测试,当使用xib动态加载任何UIViewController
类并且该类存在于某些框架中时,您必须在动态加载课
像这样打电话
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")
}
}
答案 1 :(得分:-1)
尝试将其添加到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)
}