- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图弄清楚如何使用 xib 文件创建自定义 View 。在此question使用下一个方法。
NSBundle.mainBundle().loadNibNamed("CardView", owner: nil, options: nil)[0] as! UIView
Cocoa也有同样的方法,但是这个方法在swift 3中已经变成了loadNibNamed(_:owner:topLevelObjects:) ,它返回Bool,而之前的代码会生成“Type Bool has no subscript Members”错误,这是显而易见的,因为返回类型是Bool .
所以,我的问题是如何在 Swift 3 中从 xib 文件加载 View
最佳答案
首先,该方法在 Swift 3 中没有改变。
loadNibNamed(_:owner:topLevelObjects:)
已在 macOS 10.8 中引入,并存在于 Swift 的所有版本中。然而 loadNibNamed(nibName:owner:options:)
已在 Swift 3 中被删除。
该方法的签名是
func loadNibNamed(_ nibName: String,
owner: Any?,
topLevelObjects: AutoreleasingUnsafeMutablePointer<NSArray>?) -> Bool
因此您必须创建一个指针来获取返回时的 View 数组。
var topLevelObjects = NSArray()
if Bundle.main.loadNibNamed("CardView", owner: self, topLevelObjects: &topLevelObjects) {
let views = (topLevelObjects as Array).filter { $0 is NSView }
return views[0] as! NSView
}
编辑:我更新了答案以可靠地过滤 NSView
实例。
在 Swift 4 中,语法略有变化,使用 first(where
更有效:
var topLevelObjects : NSArray?
if Bundle.main.loadNibNamed(assistantNib, owner: self, topLevelObjects: &topLevelObjects) {
return topLevelObjects!.first(where: { $0 is NSView }) as? NSView
}
关于cocoa - Swift 3 加载 xib。 NSBundle.mainBundle().loadNibNamed 返回 Bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570872/
我在 iPad 上使用 Split View模板。 在我的 MasterViewController代码: NSBundle * bundle = [NSBundle mainBundle]; 有效。
这个问题在这里已经有了答案: modifying a plist is not working (3 个答案) 关闭 10 年前。
在一些流行的开源 swift 项目中。我注意到以下方法用于从主包加载文件。 @objc class TestClass: NSObject { } let bundle = NSBundle(forC
我正在尝试将几个图像文件从 MainBundle/SampleImages 文件夹复制到应用程序 NSDocumentDirectory/Library 文件夹,但无法执行此操作。我已检查图像是否位于
基本上问题正是标题所说的。 我的应用程序在模拟器上运行顺畅,没有任何崩溃。 事实上,以前的版本在应用商店。我在这里和那里做了一些小改动,突然它开始在一个非常奇怪的地方崩溃。 我用 [NSBundle
我刚刚重新安装了我的 mac 和 Xcode。然后[NSBundle mainBundle]由于某种我不知道的原因,总是返回 nil。 非常感谢你! 这是我的调试 Pane 的屏幕截图: 最佳答案 您
我正在使用 GLKit 使用 OpenGL ES 2.0 制作一个 iPhone 应用程序。我正在使用 GLKTextureLoader 加载纹理。当我的纹理位于 mainBundle 中时 - 一切
我想不出关于 pathForResource 是如何工作的任何韵律或原因……或者更恰本地说,不是。 我的应用程序中有一堆 nib,它们都在/Build Phases/Copy Bundle Resou
在我的代码中我想打开一个html文件,所以添加了下面这行代码: NSString* path = [[NSBundle mainBundle] pathForResource:@"cheese"ofT
我有一个正在运行的 iOS 项目,在 git 分支上工作时,该项目突然不会从主 Bundle 加载任何资源...我正在为一个简单的 AVAudioPlayer 加载一个音频文件: NSURL *url
问题:[NSBundle mainBundle] pathForResource 返回 null (0x0) 我看了很多关于这个主题的帖子,这是我发现的: 确保您尝试获取路径的文件在项目中。要检查,请
我不知道检索我的 iphone 应用程序 mainBundle 中资源的所有文件名所需的确切代码。如果我能有这样的代码: NSArray *array = [[NSBundle mainBundl
RootViewController *rvController = [[RootViewController alloc] initWithNibName:@"RootViewController"
这让我发疯,因为我无法弄清楚世界上到底发生了什么。我一直从主包加载文件,xml 文件,html 文件等。但是,现在我试图获取 javascript 文件的内容,但它永远找不到它。我正在使用: NSDa
我从未加载过 bundle ,所以我不确定为什么这不起作用。我认为这并不重要,但这里有问题的 .xib 与我所有其他 .xib 位于同一个资源文件夹中。 NSArray *array = [[NSBu
此时我的应用程序在设备中崩溃了, [[NSBundle mainBundle] pathForResource 我在这里给出了 pdf 的路径。但在执行时它显示它没有到达那里的路径。这可能是崩溃的原因
此方法 appStoreReceiptURL 是 SKPaymentTransaction 上已弃用的 transactionReceipt 方法的替代品。每个人都说只使用这个调用: NSURL *t
friend , 我在仪器中运行我的代码,它显示 5 行内存泄漏(在以下代码之外)即 cell = [[[NSBundle mainBundle] loadNibNamed:@"ZoomCustomV
我正在尝试从 infoDictionary 中检索一些 URL。 10 次中有 9 次,URL 被正确返回。然而,极少数情况下,URLs 会返回 nil。知道是什么导致了这种行为吗?当这种奇怪的行为发
我有以下代码: NSString *folderPath = [NSString stringWithFormat:@"%@/Objects/", [[NSBundle mainBundle] bun
我是一名优秀的程序员,十分优秀!