如何在UIView中覆盖isHidden / setHidden / hidden

时间:2014-05-28 14:07:03

标签: objective-c uiview polymorphism override

我想覆盖我的UIView派生类中的隐藏功能,以使用alpha为hide / show设置动画(即封装功能)。由于这似乎只是基本的OO,我尝试了在我的班级中提供新功能的明显技巧,如下所示:

-(BOOL)isHidden {
    return [super isHidden];
}

- (void)setHidden:(BOOL)hidden {
    CGFloat newAlpha = 0.75f;
    if (self.hidden == NO) {
        newAlpha = 0.0;
    }
    [UIView animateWithDuration:0.5 animations: ^() {
        self.alpha = newAlpha;}];
}

......不起作用。我尝试了很多组合,但似乎无法覆盖,UIView方法只是不断被调用 - 我疯了吗?是否存在我无法理解的限制?

2 个答案:

答案 0 :(得分:0)

我无法理解你的感觉,但我希望你错过了完成块。所以,试试吧:

- (void)setHidden:(BOOL)hidden {

    CGFloat newAlpha = 0.75f;

    if (self.hidden == NO) {
        newAlpha = 0.0;
    }

    UIView animateWithDuration:0.5 animations:^{

         self.alpha = newAlpha;

    } completion:^(BOOL finished) {

        [super setHidden:hidden];
    }
}

在完成块中,您必须设置UIView的隐藏属性。

答案 1 :(得分:0)

抱歉 - 经过几个月的学习后回答我自己的问题......

我是一个doofus,一定是一个糟糕的一天 - 我的问题中的重写代码完美无缺,除非你做了我做过的愚蠢的事情,就是在我的头文件中添加一个覆盖属性:

@property(nonatomic,getter=isHidden) BOOL hidden;

将此添加到标题意味着我的isHidden / setHidden根本不被视为重载方法,即我打破了多态性。