我尝试在这个(链接)教程之后创建@IBDesignable UIView子类.第一个自定义视图很好.但是当我尝试制作另一个时,我有错误.首先,我得到了failed to update auto layout status: the agent crashed和Failed to render instance of ....不知何故,我开始能够生成并运行带有这些错误的项目,但后来我得到了新的错误 - EXC_BAD_ACCESS ...在线let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView.这是整个方法:
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "advancedCellView", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
Run Code Online (Sandbox Code Playgroud)
用第一个自定义UIView是没问题的.我使用相同的代码..
有任何想法吗?谢谢
对于那些不知道我在说什么的人,Xcode 6.0增加了新功能,IBDesignable和IBInspectable.
使用IBInspectable属性标记自定义视图时,这些属性将显示在IB中的"属性"检查器中.
同样,当您使用IBDesignable标记自定义UIView子类时,Xcode会编译您的视图并调用代码以在Xcode窗口中直接呈现视图对象,以便您可以看到它们的外观.
在自定义视图中添加IBDesignable和IBInspectable属性的技术在Swift和Objective-C中非常相似.IBInspectable属性显示在Interface Builder Attributes Inspector中,无论您使用哪种语言来定义它们.
我在Objective-C中创建了一个UIView类,并在Swift中创建了UIView的扩展,它将视图底层的borderWidth,cornerRadius,borderColor和layerBackgroundColor属性提升为视图的属性.如果更改属性,则扩展名/类别会根据需要键入转换,并将更改转发给图层.
IBInspectable部分运作良好.我看到并可以在IB属性检查器中设置新属性.
我可以在上周发誓,我的视图类别/扩展名上的IBDesignable属性也正常工作,我可以在IB中看到我的自定义UIView类别渲染,它具有更改的图层属性.本周它没有用.
我是产生幻觉的吗?
现有系统类的类别/扩展可以在使用IBDesignable设置时在Interface Builder中绘制自定义UI吗?
interface-builder ios xcode-storyboard ibdesignable ibinspectable
当我在故事板或其他笔尖中包含我的自定义IBDesignable视图时,代理会崩溃并抛出异常,因为它无法加载笔尖.
错误:IB Designables:无法更新自动布局状态:代理引发了"NSInternalInconsistencyException"异常:无法在bundle中加载NIB:'NSBundle(loaded)',名称为'StripyView'
这是我用来加载笔尖的代码:
override init(frame: CGRect) {
super.init(frame: frame)
loadContentViewFromNib()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadContentViewFromNib()
}
func loadContentViewFromNib() {
let nib = UINib(nibName: String(StripyView), bundle: nil)
let views = nib.instantiateWithOwner(self, options: nil)
if let view = views.last as? UIView {
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
}
Run Code Online (Sandbox Code Playgroud)
当我在模拟器中运行时,视图正确加载nib,为什么它不会在Interface Builder中显示?
我IBDesignable在swift中有自定义类,可以在Interface Builder中执行一些导致崩溃的事情.有没有我可以查看的标志,看看我是否在界面生成器中运行?理想情况下,它将是一个预编译器指令(#ifdef COMPILED_FOR_INTERFACE_BUILDER或类似的东西).我想也许我可以自己设置一个标志prepareForInterfaceBuilder()但是看起来很乱并且似乎没有可靠的工作,因为它看起来在调用该函数之前设置了类属性,这可能会触发导致问题的代码.似乎必须有更好的方法.谢谢!
我想创建一些使用@IBDesignable和@IBInspectable标签的自定义视图.我已将这些添加到我的框架中,然后将我的框架链接到我的测试应用程序.但是Designables从未出现在StoryBoard中.
如何使用@IBDesignable和@IBInspectable从外部框架创建自定义视图?
您可以使用@IBDesignable,并@IBInspectable在从非嵌入式框架的应用程序?
谢谢.
我做了什么:
已删除的派生数据,重新启动的xcode,编辑器 - >Refresh all views
我得到Designables在故事板构建失败当我点击编辑- > Refresh all views.
请检查以下代码.我错过了什么?当我从属性检查器更改@IBInspectable值时,Textfiled未在故事板中更新.
import UIKit
import QuartzCore
@IBDesignable
class BorderedFloatingTF: UITextField {
required init?(coder aDecoder:NSCoder) {
super.init(coder:aDecoder)
setup()
}
override init(frame:CGRect) {
super.init(frame:frame)
setup()
}
override func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.insetBy(dx: 20, dy: 0)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
return textRect(forBounds: bounds)
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setup()
}
// properties..
@IBInspectable var enableTitle : Bool = false …Run Code Online (Sandbox Code Playgroud) 是否可以@IBInspectable在Attribute Inspector中配置属性的显示和/或控制方式?例如,我有一个CGFloat属性"覆盖Alpha",它在检查器中显示如下:

问题是调节器上/下箭头仅以整数(+/- 1)步进更新.我希望它们以小步骤更新,比如+/- 0.05增量.有没有办法做到这一点?
控件的其他属性如何?您可以为CGFloat数字字段而不是数字字段显示滑块吗?你能添加一个工具提示吗?你能添加静态描述性文字吗?
只是想知道我可以自定义多少显示器.我试图看看我能在多大程度上推动IBDesignable功能,使IB成为一个真正的UI设计工具.
当我使用本指南创建一个在XIB中设计的视图时,可以使用我的UIView子类上的IBDesignable属性从故事板中重用,如何使其具有固定大小,并使其大小调整行为与像UISwitch这样的观点?
在"调整大小行为"时,我也意味着在界面构建器中进行设计.
我希望能够在代码中布局我的视图控制器,但是看到界面构建器中显示的布局.
我知道我可以创建一个UIView子类,使其成为IBDesignable,并将其分配给视图控制器的视图,但这需要我创建此UIView子类的所有其他子视图属性,而不是视图控制器的属性.
真正的愿望是能够在代码中布局我的视图控制器,但在不重建项目的情况下快速查看任何更改.如果这可以通过游乐场来实现,那么描述如何做到这一点的答案也将受到赞赏.
谢谢你的任何建议.
interface-builder uiviewcontroller xcode6 swift-playground ibdesignable
我正在尝试在我的应用程序中使用IB_DESIGNABLE.
问题是我的应用程序很庞大并且需要相当长的时间来构建(即很多分钟),因此我希望将所有自定义视图保留在单独的目标中,并让Interface Builder仅构建要满足的目标.
无论我尝试什么,Xcode似乎在构建Interface Builder的"可设计"构建时构建我项目中的所有目标,即使我将所有故事板和IB_DESIGNABLE类移动到他们自己的框架中并将其从所有其他目标中移除.大多数代码都是用Objective-C编写的.
反正配置或欺骗界面构建器只是构建我想要构建的目标吗?我已经尝试使用谷歌搜索但未能找到任何描述界面构建器如何决定构建内容或如何影响它的内容.