jbe*_*s94 71 xcode interface-builder ios swift
当我编写自己的UIButton扩展类并创建它时@IBDesignable,我在Interface Builder中收到两个错误,即:
这是我的代码:
import UIKit
@IBDesignable
class RandjeUIButton: UIButton {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.backgroundColor = UIColor.blackColor()
}
}
Run Code Online (Sandbox Code Playgroud)
我在OS X 10.11 beta 2上使用Xcode 7 beta 2.(在VM中运行)
mat*_*elo 113
Xcode的Interface Builder要求您实现两个或两个@IBDesignable类的初始化器都不能在IB中正确呈现.
如果你实现required init(coder aDecoder: NSCoder)你也需要覆盖init(frame: CGRect),否则"代理将崩溃",如Xcode抛出的错误所示.
为此,请将以下代码添加到您的类中:
override init(frame: CGRect) {
super.init(frame: frame)
}
Run Code Online (Sandbox Code Playgroud)
小智 23
我遇到了同样的问题并以这种方式解决了这个问题:
错误:IB Designables:无法更新自动布局状态:代理程序崩溃

然后Xcode会告诉你prolem在哪里.在我的情况下,我IBDesignable在课前放弃了.
然后我清理并重建它,错误消失了
Gle*_*ett 11
在Xcode 7.3中,上述解决方案都不适用于我,但是这个问题的接受答案是:无法呈现IB Designables的实例
- 清除项目的Xcode派生数据.它们位于〜/ Library/Developer/Xcode/DerivedData中
- 按⌘⇧K清除当前版本
- 建立你的项目
- 在故事板中转到"编辑器"菜单并执行"刷新所有视图"; 等待构建完成,错误应该消失
我不需要做第4步来解决问题(并让我的PaintCode-drawRect'd UIView在故事板中绘画),这里包括以防万一.
感谢@Mojtaba和@WeZZard
Stu*_* mc 11
对我来说,没有使用#if !TARGET_INTERFACE_BUILDER它让我.基本上我有一些代码会导致访问我的Bundle中的路径...
Bundle.main.path(forResource: "Foo", ofType: "plist")
Run Code Online (Sandbox Code Playgroud)
问题是,在IB(而不是在您的应用程序中)运行时,Bundle.main不是您的应用程序...
(lldb) po Bundle.main
NSBundle </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays> (loaded)
Run Code Online (Sandbox Code Playgroud)
所以答案就是@IBDesignable UIView仔细检查你的代码并使用在设计时运行时没有意义的#if !TARGET_INTERFACE_BUILDER任何事情(CoreLocation例如我的调用).
这是Editor -> Debug Selected View您@IBDesignable UIView在故事板中使用while时选择的内容:
voi*_*ref 10
有许多问题可能导致这种情况.启动控制台,查找崩溃报告IBDesignablesCocoaTouch...
我刚刚解决了第三方可设计的问题,这个问题与valueForKey语义有关.
在任何标有@IBDesignable的类中使用UIImage时,我发现确实很重要。经典的UIImage初始化会使代理崩溃:
let myImage = UIImage(named: String) // crash the agent
Run Code Online (Sandbox Code Playgroud)
解决方案是使用UIImage的此init方法:
let myImage = UIImage(named: String, in: Bundle, compatibleWith: UITraitCollection)
Run Code Online (Sandbox Code Playgroud)
工作代码示例:
let appBundle = Bundle(for: type(of: self))
let myImage = UIImage(named: "myImage", in: bundle, compatibleWith: self.traitCollection))
Run Code Online (Sandbox Code Playgroud)
使用@IBDesignable关键字的self是您的类。Xcode 9.4,Swift 4.1
XCode 10,Swift 4.2
我在这里找到答案
解决方案很简单-在required init?(coder aDecoder: NSCoder)我的自定义视图类的方法中更改解决捆绑的方式。
Bundle.main.loadNibNamed(String(describing: TestView.self), owner: self, options: nil)
Run Code Online (Sandbox Code Playgroud)
需要更改为
let bundle = Bundle(for: TestView.self)
bundle.loadNibNamed(String(describing: TestView.self), owner: self, options: nil)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30760 次 |
| 最近记录: |