iOS UIView子类 - 从类方法中显示/删除(如UIAlertView)

时间:2012-12-04 19:45:55

标签: ios uiview subclass

我希望有一个可以在多个视图控制器上显示的自定义视图。 我想像UIAlertView一样设置它,我在其中初始化它,然后调用[myView show]将它添加到当前视图控制器。 想知道如何将自定义uiview直接从它的类添加到当前视图控制器上。 视图也将在一段时间后自行消失(基本上自定义视图是在淡出之前显示一些短暂时刻的统计数据的动画)。

从类方法调用[myView show]将替换必须初始化视图,然后调用[self.view addSubview:myView]。

直接在其类中显示/删除自定义视图的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

我对jsd采取了不同的方法,我将其添加到视图中。也许窗户更好。但是当我尝试它时,这段代码似乎做了所需的事情:

@implementation EWView

+ (void)show:(UIView *)superView {
    EWView *instantView = [[EWView alloc]initWithFrame:CGRectMake(20, 20, 50, 50)];
    instantView.backgroundColor = [UIColor greenColor];
    [superView addSubview:instantView];
    int64_t delayInSeconds = 4.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [instantView removeFromSuperview];
    });
}

@end

我从一个带有

的UIViewController调用它
[EWView show:self.view];

仅当块尚未执行时,视图才会继续存在。当块完成时,EWView将被释放。

答案 1 :(得分:2)

UIAlertView和朋友将自己添加到UIWindow的视图中,而不是当前视图控制器的视图。这就是你应该做的。

如果您知道它们将在某个预定时间内逐渐淡出,您可以阻止进行删除并使用dispatch_after()。见How do you trigger a block after a delay, like -performSelector:withObject:afterDelay:?