我为什么不能操纵在我的厦门国际银行文件中的对象?(Why can I not manipulate

2019-10-18 22:06发布

我有一个文件, View.xibUIView ,它出现,每个相同的UIView子类的。 意见看上去都有点不同,但他们将被用作一个指南屏幕页面,所以它们对底部的页面指标。

我做的每一页上的三个页面指标的出口集合。 所以在定制UIView我做了一个出口集合,每个三视图我连这三个页面指标出口集合。

然而,在initWithFrame:我做到以下几点:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        for (UIView *pageIndicator in self.pageIndicators) {
            pageIndicator.layer.cornerRadius = pageIndicator.bounds.size.width / 2;
        }
    }
    return self;
}

(for循环是关键部分。)

但是,当我添加UIView从笔尖在我的其他文件,该指标不圆如上面的代码应做到:

    TutorialScreen *tutorialScreen1 = [[[NSBundle mainBundle] loadNibNamed:@"View" owner:nil options:nil] objectAtIndex:0];
    tutorialScreen1.layer.cornerRadius = 8.0;
    [self.notificationWindow addSubview:tutorialScreen1];

我究竟做错了什么?

样本项目中,这是行不通的: http://cl.ly/170O2u10181V

Answer 1:

当一个对象从笔尖/ XIB读取,它被初始化为initWithCoder: 重写和做同样的事情(或更好,但其移动到两个呼叫的方法)。

- (void)mySetup
{
    for (UIView *pageIndicator in self.pageIndicators) {
        pageIndicator.layer.cornerRadius = pageIndicator.bounds.size.width / 2;
    }
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self mySetup];
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self mySetup];
    }
    return self;
}

看你的项目后,你从一个不同的问题的痛苦。 你没有提到你试图使用IBOutlets。 :) IBOutlets不是之前加载initWithCoder: 你需要陷阱awakeFromNib代替。

从苹果公司的文档:

笔尖装载基础设施发送一个awakeFromNib消息从笔尖档案重建每个对象,但只有在归档中的所有对象已经被加载和初始化。 当对象接收到awakeFromNib消息时,它保证具有已经建立的所有它的出口和动作连接。

你会做这样的:

- (void)awakeFromNib
{
    [super awakeFromNib];
    for (UIView *circle in self.circles) {
        circle.layer.cornerRadius = circle.bounds.size.width / 2;
    }
}


文章来源: Why can I not manipulate the objects in my xib file?