如何以编程方式在自定义子视图中添加标签?

时间:2015-07-05 19:11:59

标签: ios objective-c uiview interface-builder drawrect

我为iOS设计了一款纸牌游戏(针对人类的卡片),有两种类型的卡片,白色卡片和黑色卡片。所以我实现了一个继承自UIView的CardView类,以及两个继承自CardView的类WhiteCardView和BlackCardView。 正如你猜测的那样,几乎只有颜色会在这两者之间发生变化,但我仍然想要两个不同的视图类(即使它们目前几乎相同)。所以,我有四个问题。

编辑:我想找出自己的答案,但对于最后一个,我迷失了。

1.我需要有关实施的建议,我不知道我是否正确设置卡片的颜色,这些卡片存储在CardView中但设置在我的WhiteCardView的init中。我想我必须只覆盖一个init,但我不知道哪一个。因此,如果有人能够确认或纠正我已经做过的事情,那就太好了。感谢

这是我的CardView代码:

IB_DESIGNABLE
@interface CardView : UIView

-(void)customDrawUI;
-(void)setData;

@property (nonatomic) UIColor* IBInspectable secondaryColor;
@property (nonatomic) UIColor* IBInspectable primaryColor;
@property(nonatomic) UILabel* txtLabel;

@end


@implementation CardView

-(void)customDrawUI{
    self.layer.cornerRadius=5.0;
    self.backgroundColor = self.primaryColor;
}

-(void)setData{
    self.txtLabel.text = @"some text";
}
@end

WhiteCardView代码:

IB_DESIGNABLE
@interface WhiteCardView : CardView
@end


@implementation WhiteCardView

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect myFrame = self.bounds;
    CGContextSetLineWidth(context, 1);
    CGRectInset(myFrame, 5, 5);
    [self.secondaryColor set];
    UIRectFrame(myFrame);
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.primaryColor= [UIColor whiteColor];
        self.secondaryColor= [UIColor blackColor];
        [super customDrawUI];
        [super setData];
    }
    return self;
}

@end

2.在界面构建器中(我正确地为每张卡定义了自定义类),我的视图没有实时渲染,我的drawRect方法WhiteCardView中的代码被执行但我看不到任何变化。 当我运行我的应用程序时,我得到相同的结果。只是白色矩形,没有任何圆角。 知道为什么我的观点没有变化吗?

编辑:我没有将IBDESIGNABLE标记放在正确的位置,现在可以了!

3.有没有办法在父drawRect方法中执行该行:self.backgroundColor = self.primaryColor;?因为它目前同时存在:White和BlackCardView,并且肯定有一种方法可以在父类中执行它(我将为这两个类添加公共代码,所以我需要一种方法来实现它) 。 也许可以在CardView的init中执行此操作,但由于它目前无法正常工作,我无法对其进行测试。

编辑:我发现,无法从drawRect调用setBackground,因此我在CardView类中定义了一个新方法来执行此操作。我从init方法中调用它。

4.最重要的部分:如何在每张卡上添加标签(不是通过界面构建​​器,而是通过CardView类),并能够以编程方式设置其内容? 我为该标签定义了一个属性,并设置了它的值,但我不知道如何渲染它。

0 个答案:

没有答案