我正在尝试在我的UIButton中使用IB Designable和IB Inspectable,但似乎有一些错误.
在问题导航器中,捆绑文件:
故事板: IB Designables:无法更新自动布局状态:无法从路径加载designabled(null)
所以我想知道是否有任何配置可以在静态库或类似的东西中使用它?
这是
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomUIButton : UIButton
@property (nonatomic) IBInspectable int cornerRadius;
@end
Run Code Online (Sandbox Code Playgroud)
我想要实时渲染的自定义按钮位于视图控制器内
有一种方法可以NSArray IBInspectable在Storyboard自定义视图中定义多个值吗?
我知道NSArray没有关于将存储在其中的对象类型的任何信息,所以它可能是一个问题.但是有一些解决方案使用注释或其他东西?
我想要做的是设置NSArray的UIColors通过故事板和可视化的故事板绘制在视图中的渐变层.
我开始创建两个名为startColor和endColor的属性.这工作正常,但我想这样做更通用.
这是我的drawRect方法:
- (void)drawRect:(CGRect)rect {
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)[self.startColor CGColor], (id)[self.endColor CGColor], nil];
[self.layer addSublayer:gradientLayer];
}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
- (void)drawRect:(CGRect)rect {
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.bounds;
// colorsArray should be an IBInspectable property in order to be setted on Storyboard Attributes Inspector
gradientLayer.colors = self.colorsArray;
[self.layer addSublayer:gradientLayer];
}
Run Code Online (Sandbox Code Playgroud) 在故事板中有一个UIView,具有约束例如"0.1"比例高度.
想象一下,对于许多不同场景中的视图,您有类似的约束"0.1".
假设您要将值更改为0.1到0.975.
你必须在任何地方单独改变它.
有没有办法使用@IBInspectable和/或约束来形成一种"全局价值"?
这样您就可以立即更改所有内容,并在故事板中同时查看结果.
(当然,在运行时你可以在代码中传播它们.但最好在故事板上看到它.)
请注意,Wain的解决方案可以完美地运行:您可以设置一次值,并影响应用程序中的任何位置.但不幸的是,它只在运行时才这样做,你没有在故事板上看到它.
我在Swift中使用IBInspectable Int来选择4种形状(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?
Run Code Online (Sandbox Code Playgroud) 在我的自定义UIView中,我有一个属性,我将其暴露给故事板@IBInspectable.
/**
My custom property documentation.
*/
@IBInspectable var myProperty: Double = 2.5
Run Code Online (Sandbox Code Playgroud)
当用户将光标悬停在属性检查器中的字段上时,有没有办法显示文档?它适用于内置元素,我想为我的属性做同样的事情.

我似乎无法获得"titleText"IBInspectable属性.我有一个带有UILabel的简单框架视图,我创建了一个IBInspectable变量"titleText".我注意到可检查的"层"变量按预期工作,但不是我的自定义"titleText",它应该使用此框架更新主视图.
问题是:
Interface Builder没有更新titleLabel?(即在设计时),即我希望这应该,就像它适用于"层"项目.
在运行时,titleLabel的值也没有获取我在IB中设置的值.请注意,当我运行时,我得到以下输出,即产生这个的代码是发现"self.titleLabel"实际上是零?
代码摘要
(b)gcCustomerView.swift
import UIKit
@IBDesignable
class gcCustomView: UIView {
@IBOutlet weak var titleLabel: UILabel!
@IBInspectable var titleText: String = "Default" {
didSet {
if self.titleLabel != nil {
self.titleLabel.text = titleText
} else {
NSLog("Could not set title text as label.text was nil : was trying to set to \(titleText)")
}
}
}
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var …Run Code Online (Sandbox Code Playgroud) 我创建了很多 IBInspectable。但是今天,我观察到 Xcode 有一些像这样的属性:
在链接中,我标记了矩形框。我想创建这样的自定义 IBInspectable。我不知道这可能还是不可能。
任何帮助,将不胜感激。
我有一个自定义UIView类,其中有一个UILabel作为子视图。我想在 Interface Builder 中设置标签的字体大小,因此我创建了一个计算属性fontSize来获取和设置UILabel字体的磅值。
@IBDesignable class UIMongolLabel: UIView {
private let view = UILabel()
let mongolFontName = "ChimeeWhiteMirrored" // font is always the same
@IBInspectable var fontSize: CGFloat {
get {
if let font = view.font {
return font.pointSize
} else {
return 0.0
}
}
set {
view.font = UIFont(name: mongolFontName, size: newValue)
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果用户设置字体大小的值,则效果很好:
但如果用户只是添加一个新的自定义视图,则字体大小为空。
这里的答案说,在 Swift 中为计算属性设置默认值是没有意义的,但是如果我想要 Interface Builder 的默认值怎么办?我想让它说“17”之类的。我应该怎么办?
我在MyClass.h文件中有此文件:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface MyClass : UIView
@end
Run Code Online (Sandbox Code Playgroud)
这是.m文件中的代码:
-(void)awakeFromNib{
[super awakeFromNib];
NSLog(@"This works %lud",(unsigned long)self.max);
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
NSLog(@"This doesn't work %lud",(unsigned long)self.max);
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
在awakeFromNib方法中,我在IB中设置了正确的值。在initWithCoder中:此值等于零。
检查该属性中在IB中设置的值的合适时间是什么?
这就是我在.m文件中定义属性的方式:
@interface MyClass()
@property (nonatomic) IBInspectable NSUInteger max;
@end
Run Code Online (Sandbox Code Playgroud) 我是xcode开发的新手,在尝试修改我自己项目的IBinspectable属性中的apple教程时,我遇到了一个主要的障碍.
我定义了一个简单的按钮子类:
import UIKit
@IBDesignable public class SocialMediaLoginButton: UIButton {
private var _loginType: SocialMediaLoginType = .facebook
@IBInspectable public var loginType: SocialMediaLoginType
= SocialMediaLoginType.facebook {
didSet {
self._loginType = loginType
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的故事板中添加了一个UIButton,然后我选择了CustomClass作为上面的类型.当我切换到属性检查器时,属性不适合我调整.我不知道发生了什么:
我已经查找了其他问题,但是在应用开发人员论坛上有极其过时或没有答案.
我试过了:
这些都没有奏效.我对如何解决这个问题感到茫然.我正在使用Xcode 8.3.3
ibinspectable ×10
ios ×7
ibdesignable ×5
swift ×4
xcode ×4
objective-c ×2
uistoryboard ×2
xcode8 ×2
bundle ×1
cocoa-touch ×1
ios10 ×1
nsarray ×1
storyboard ×1
uikit ×1