Tag: ibinspectable

为什么不能将IBInspectable与枚举一起使用?

我记得当我在2014年看到WWDC的IBInspectable和IBDesignable时 ,我的反应是: 太神奇了,现在我可以创建一个组件并在Interface Builder中查看结果并配置它,这是设计人员可以使用的一个很棒的功能。 完善! 不。 要了解IBDesignable和IBInspectable ,请参阅我的另一篇文章– 什么是IBDesignable / IBInspectable? [1]。 尝试与IBInspectable一起使用枚举 如果尝试创建像下面的代码这样的枚举并将其与IBInspectable属性一起使用,您将看到它不起作用。 枚举DateFormat:Int { 案例短// 05/20/2016 案例Medium // 2016年5月20日 案例全// // May 20,2016 11:10 AM } @IBDesignable 类CustomLabel:UILabel { @IBInspectable var format:DateFormat = .Short { didSet { //更新标签 } } } IBInspectable对类型有一些限制: Int,CGFloat,Double,String,Bool,CGPoint,CGSize,CGRect,UIColor和UIImage 。 我认为IBInspectable不支持枚举,因为正如Swift编程语言所说: “使用枚举创建枚举。像类和所有其他命名类型一样,枚举可以具有与之关联的方法。” [2] 因此,枚举不仅是一个简单的枚举,而且可以为(例如)创建更多的枚举: 公共枚举DateFormat:Int { 案例短// 05/20/2016 案例Medium […]

什么是IBDesignable / IBInspectable?

IBDesignable和IBInspectable是Interface Builder使用的属性,但与IBOutlet和IBAction也是属性不同, IBInspectable和IBDesignable用于直接在Interface Builder中呈现元素。 WWDC 14 [1]中显示的这些属性首先受Objective-C支持,但现在您也可以与Swift一起使用。 渲染自定义UI组件 IBDesignable属性负责标识从UIView继承的类,该UIView将在Interface Builder中呈现。 例如,我使用IBDesignable创建了一个ImageView定制: 导入UIKit @IBDesignable类CustomImageView:UIImageView { 覆盖func prepareForInterfaceBuilder(){ self.layer.cornerRadius = self.bounds.size.width / 2 self.layer.borderWidth = 6 self.layer.borderColor = UIColor.blackColor()。CGColor self.layer.masksToBounds = true } } 您可以在下面看到结果: 但是要获得此结果,我需要在Identity Inspector中将UIImageView设置为CustomImageView : 通过Interface Builder配置UI组件 IBInspectable是另一个可用于配置您的UI组件(例如)的属性,只需要您在代码中将该属性与该属性一起使用即可: @IBInspectable var borderWidth:CGFloat = 6.0 { didSet { self.layer.borderWidth = self.borderWidth } } 结果是: 不幸的是, IBInspectable不能与所有类型一起使用,请参见下面的列表,它可以支持: […]

Swift 3中的@IBDesignable和@IBInspectable。

IBDesignable 和 IBInspectable ,这是一种创建自定义元素和属性的方法。 可以直接将其添加到iOS Interface Builder。 此WWDC 2015视频演示了如何实现自定义UI元素。 在Interface Builder中实现UI设计– WWDC 2015 –视频– Apple Developer 突出的应用程序必须具有吸引力,直观且易于使用。 Interface Builder专家将为您提供技能… developer.apple.com IB可设计 IBDesignable属性将标识UIView或从UIView继承的元素-例如:UIButton,UIImageView,UILabel等。 例如,我创建了一个Custom UIButton类, @IBDesignable 打开类KGHighLightedButton:UIButton { 公共替代init(框架:CGRect){ super.init(frame:框架) setTitle(“ MyTitle”,用于:.normal) setTitleColor(UIColor.blue,for:.normal) } 公用必需的init?(编码器aDecoder:NSCoder){ super.init(编码器:aDecoder) } } 添加此类后,在ViewController中导入自定义类 #import KGHighLightedButton 在Interface Builder(`StoryBoard`)中,拖放UIButton。 转到“ 显示身份检查器 ”,并将类和模块设置为“ KGHighLightedButton”。 IB检查 让我们在按钮上添加一些自定义属性。 🙌 为此,我们必须使用IBInspectable属性。 让我们看看如何添加它们。 @IBInspectable public var cornerRadius:CGFloat […]

在Swift中使用IBInspectables

具有可自定义细分的简单进度栏 我已经看到了很多进度条小部件,所以我决定尝试通过Interface Builder进行自定义的“ SegmentedProgressBar”。 要继续或快速将此视图添加到您自己的项目中,请在GitHub上获取它。 在深入研究代码之前,我先介绍了两个主要功能: 1)自定义细分 段应该是完全可自定义的,包括宽度,高度,背景颜色,borderWidth,borderRadius,borderColor。 同样,分隔线段的线也应可自定义:线高,线宽(线段之间的距离),线色。 2)IBDesignables IBDesignables允许Interface Builder实时呈现自定义视图的UI更改。 与IBInspectables结合使用,用户可以编辑特定的运行时变量并立即查看结果,从而节省了大量的开发时间。 入门 首先,我们需要建立一个支持IBDesignables的自定义类。 @IBDesignable标记使Interface Builder知道该类应自动呈现。 如您所见,所有定义为IBInspectable变量的属性在属性检查器中都是可见的。 现在建立我们的第一部分! 我将重写视图的onDraw()函数,以实时呈现对该类所做的所有UI更改。 每个段和线的所有自定义绘制逻辑都将在此函数内发生。 在这里,我创建了一个名为’segment1’的新UIView,该视图以父级居中居中,其宽度,高度和颜色取自可检查变量。 编辑这些变量中的任何一个都应实时更改“ segment1”的形状和颜色。 注意:如果Interface Builder似乎没有呈现任何更改,则可能必须在编辑器菜单中启用“自动刷新视图”。 建立进度条 现在我们有了第一段,但是还需要两个元素:第二段以及它们之间的连接线。 此时, draw()函数变得越来越庞大。 让我们draw()重构为drawLine()和drawSegments() ,然后制作一些实例变量来跟踪我们的视图。 我们将创建两个UIView列表,一个用于段,一个用于线,以便以后可以与每个元素进行交互。 现在添加buildOddSegments()函数。 大多数逻辑已在drawLine()和drawSegment() ,因此此实现应与buildEvenSegments()相当相似。 太好了,现在我们可以为任意数量的细分提供工作进度条! 一切看起来都不错,只是许多部分都被绘制在了线后。 让我们添加一个快速功能,在构建完所有线之后更新线段的z轴。 现在我们可以从界面构建器手动更新selectedIndex ,让我们创建一些函数以使开发人员能够以编程方式执行此操作。 最终波兰语 进度栏确实开始融合在一起,但是我们需要在其完全完成之前添加一些自定义选项。 开发人员应该能够编辑线段的cornerRadius , borderWidth和borderColor 。 此外,如果开发人员希望使所有线段都为圆形而无需计算特定的拐角半径,则应添加一个circularSegment选项。 首先让我们为cornerRadius , borderWidth , borderColor和cornerRadius添加一些新的可检查变量。 为了使线段完美地呈圆形,其宽度和高度必须相等。 在这里,我使用didSet{}来确保segmentWidth […]

访问@IBInspectable UIImage时,界面构build器代理崩溃

我通过@IBInspectable UIView并使用@IBInspectable来实现一个自定义视图。 其中两个是UIImage。 如果我尝试在代码中访问其中的一个,那么界面生成器会崩溃,并显示以下消息: file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to update auto layout status: The agent crashed 和 file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to render instance of MyView: The agent crashed 一切在模拟器和设备上运行良好。 以下是如何重现它,假设image_one.png在资产中: import UIKit @IBDesignable class MyView: UIView { @IBInspectable var anImage: UIImage = UIImage(named: "image_one")! } 事实上,界面生成器代理在初始化这个variables时崩溃了。 如果你写var anImage: UIImage! = UIImage(named: "image_one") […]

EXC_BAD_ACCESS使用IBInspectable

我正在尝试使用IBInspectable为我的视图添加边框。 extension UIView { private func getBorder(integer: Int) -> UIRectEdge { if integer == 1 { return .top } else if integer == 2 { return .left } else if integer == 3 { return .right } else if integer == 4 { return .bottom } return .all } @IBInspectable var border: Int? { get […]

你可以使用类别/扩展将IBDesignable属性添加到UIView?

对于那些不知道我在说什么的人,Xcode 6.0增加了一些新function,IBDesignable和IBInspectable。 当您使用IBInspectable属性标记自定义视图时,这些属性将显示在IB的属性检查器中。 同样的,当你使用IBDesignable标记一个自定义的UIView子类时,Xcode编译你的视图并调用代码在Xcode窗口中显示你的视图对象,这样你就可以看到它们的样子。 在自定义视图中添加IBDesignable和IBInspectable属性的技术在Swift和Objective-C中非常相似。 无论您使用哪种语言来定义它们,IBInspectable属性都将显示在Interface Builder属性检查器中。 我已经在Objective-C中创build了一个UIView类,并在Swift中扩展了UIView,它将视图底层的borderWidth,cornerRadius,borderColor和layerBackgroundColor属性作为视图的属性进行提升。 如果更改属性,则扩展名/类别会根据需要进行types转换,并将更改转发给图层。 IBInspectable部分效果很好。 我看到并可以在IB属性检查器中设置新属性。 我可以发誓,上周,我的视图类别/扩展的IBDesignable属性也工作,我可以看到我的自定义UIView类别在IB中呈现与它的改变图层属性。 本周它不工作。 我是幻觉吗? 在使用IBDesignable进行设置时,现有系统类的类别/扩展可以在Interface Builder中绘制自定义UI吗?

如何设置IBInspectable Int的最大限制

我在Swift中使用IBInspectable Int来select四个四个形状(0-3),但是在故事板编辑器中可以设置一个大于3且小于0的值,这会停止IBDesignable系统的工作。 是否可以设置故事板编辑器中可以设置的最小值和最大值? let SHAPE_CROSS = 0 let SHAPE_SQUARE = 1 let SHAPE_CIRCLE = 2 let SHAPE_TRIANGLE = 3 @IBInspectable var shapeType: Int = 0 @IBInspectable var shapeSize: CGFloat = 100.0 @IBInspectable var shapeColor: UIColor?

某种“全球”的IBDesignables?

在故事板中有一个UIView,约束例如“0.1”比例高度。 想象一下,在许多不同的场景中,你有一个类似的约束“0.1”。 假设你想将0.1的值改为0.975。 你必须随时随地改变它。 有什么方法可以使用@IBInspectable和/或约束来创build一种“全局值” ? 这样你就可以一次把它们全部改变 ,并在故事板中一次查看结果。 (当然,在运行的时候,你可以用代码来传播,但最好在故事板上看到。) 请注意,例如,Wain的解决scheme完美地工作:您可以设置一次的值,并影响到应用程序的任何地方。 但不幸的是,它只能在运行时间,而不是在故事板上看到它。