首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IB_designable外部

IB_designable外部
EN

Stack Overflow用户
提问于 2015-02-03 23:49:05
回答 2查看 110关注 0票数 0

我一直在研究IB_designable,这是一个非常棒的特性。但是,我有一个问题是,对于每个视图,我必须对一个UIView进行子类。在这个子类中,我必须指定initWithCoder:方法和prepareForInterfaceBuilder中的UI元素:

但是,我希望能够在类之外指定UI元素。

我想要创建一个UIView子类,它有一个公共属性,我可以从外部设置它,并在中看到它。

这个是可能的吗?

更新:

我知道IBInspectible。这使得属性检查器中的属性可用。这不是我所说的外部的意思。

代码语言:javascript
复制
IB_DESIGNABLE
@interface DesignableLabel : UILabel
@end
@implementation DesignableLabel 
@end

@interface SomeClass : UIViewController {
    IBOutlet DesignableLabel *DL;
}
@end
@interface SomeClass
- (void)prepareForInterfaceBuilder {
    DL.text = @"Hello World"
}
@end

DesignableLable是UILabel的子类。UILabels具有text属性。我想让SomeClass以某种方式设置这个属性。通常情况下,如果我这样做并运行应用程序,它应该显示字符串。然而,为了省去运行应用程序的麻烦,我希望它出现在界面构建器中,这样我就可以在输入时看到它的价值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-14 18:02:09

我会回答我自己的问题,让其他人受益。可以使用用户定义的运行时属性调用类别方法,从外部设置IB_Designable对象。

代码语言:javascript
复制
IB_DESIGNABLE
@interface DesignableLabel : UILabel
@end

@implementation DesignableLabel 
@end

@implementation DesignableLabel (Runtime_TheTextYouWant)
    - (void)setTheText:(BOOL)b {
        if (!b) return;
        self.text = "The text you want";
    }
@end

@implementation DesignableLabel (Runtime_SayHelloToMyLittleFriend)
    - (void)setMyLittleFriend:(BOOL)b {
        if (!b) return;
        self.text = "Say hello to my little friend";
    }
@end

我为我的DesignableLabel创建了两个类别。现在,如果我将两个UILabels放入故事板中的ViewController中,并将两个UILabel子类放到DesignableLabel中,那么对于第一个UILabel,我可以通过调用关键路径来使用用户定义的运行时属性

代码语言:javascript
复制
theText

使用布尔值的类型并设置复选标记。然后,这个特定的DesignableLabel对象将在setTheText:分类方法中指定文本。

类似地,对于第二个DesignableLabel对象,可以通过调用键路径来使用用户定义的运行时属性。

代码语言:javascript
复制
myLittleFriend

注意,键路径没有使用"set“这个词,它降低了第一个单词的大小写。setMyLittleFriend:变成myLittleFriend。

总之,这样可以避免为每个IB_DESIGNABLE对象创建一个子类。

票数 0
EN

Stack Overflow用户

发布于 2015-02-08 20:09:01

您希望在外部设置的公共属性(使用您的公共API)必须用IBInspectable关键字标记。例如:

代码语言:javascript
复制
 @property (readwrite) IBInspectable BOOL activityIndicatorOn;

您可以在苹果网站上找到关于这个关键字的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28311003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档