如何覆盖IBOutlet的getter

时间:2014-07-31 22:17:14

标签: ios objective-c iboutlet

我在自定义表格视图单元格中有一个IBOutlet。

@property (weak, nonatomic) IBOutlet UIView *innerContainer;

我想将getter重写为

-(UIView *)innerContainer
{
    UIColor * shadowColor= [UIColor colorWithRed:199/255.0f
                                           green:178/255.0f
                                            blue:153/255.0f
                                           alpha:1];

    _innerContainer.layer.shadowOffset = CGSizeMake(0, 0);
    _innerContainer.layer.shadowColor = [shadowColor CGColor];
    _innerContainer.layer.shadowRadius = 4;
    _innerContainer.layer.shadowOpacity = .75;

    CGRect shadowFrame = _innerContainer.layer.bounds;
    CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
    _innerContainer.layer.shadowPath = shadowPath;

    return _innerContainer;
}

但似乎没有效果。另一方面,如果我将阴影添加到<{p}内的innerContainer

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

然后效果是什么?

我尝试添加@synthesize innerContainer=_innerContainer,但这没有任何区别。

有没有办法覆盖IBOutlet的getter?

1 个答案:

答案 0 :(得分:1)

这不是正确的做法。使用当前代码,每次访问innerContainer时都会执行设置阴影的工作。它可能无法正常工作,因为您没有直接在代码中访问innerContainer,并且从未执行过getter。另一方面,如果您多次访问该属性,则每次都会执行该工作,这是过度的。相反,覆盖表视图单元格的awakeFromNib方法,并将此逻辑放在那里。只要您的所有商店都已建立,就会调用此方法,这是您创建阴影的逻辑的正确位置。