繁体   English   中英

iOS:如何在框架内加载 xib

[英]iOS: How to load a xib inside framework

我使用 CocoaPod 创建了一个包含 xib 视图的新框架,以及一个用于测试该框架的测试应用程序。 测试应用程序包含一个按钮,用于调用该框架并显示 xib。

起初,我在这一行的框架内发生了崩溃:

if let myView = Bundle.main.loadNibNamed("myCustomXib", owner: self, options: nil)?.first as? myCustomXibClass 

日志: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/User/Library/Developer/CoreSimulator/Devices/F7B870D5-4CEC-4CC7-9C76-75DF1408A26C/data/Containers/Bundle/Application/20E3D273-315C-43EE-95CC-9B00B8EE8B6E/appDemo.app> (loaded)' with name 'myCustomXib''

然后我改变了这一行:

let bundle = Bundle(identifier:"com.framework.identifier")

    if let myView = bundle?.loadNibNamed("myCustomXib", owner: self, options: nil)?.first as? myCustomXibClass {

并且崩溃消失了,但没有显示任何内容。

这是我在 podspec 中添加源的方式:

  s.resources   = ["**/*.{storyboard,xib}", "Assets.xcassets"]

我得到了本地开发 pod 中的所有文件。 故事板工作完美,但不是 xib。 那我该怎么办?

创建一个简短的静态类,我们称之为MyFrameworkBundle

public final class MyFrameworkBundle {
    public static let main: Bundle = Bundle(for: MyFrameworkBundle.self)
}

对于WindowController 中XIB

public class MyFrameworkWindowController: NSWindowController {

    override public var windowNibName: String! {
        return "MyFrameworkWindowController"
    }

    public init() {
        super.init(window: nil) 

        /* Load window from xib file */
        MyFrameworkBundle.main.loadNibNamed(windowNibName, owner: self, topLevelObjects: nil)
    }

    // Override this as required per the class spec
    required public init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented. Use init()")
    }

    override public func awakeFromNib() {
        //Do your stuff
    }
}

如果您从“ Development Pods ”目录在本地运行代码,请在第一次运行之前使用CMD+SHIFT+K

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM