如何在一个类中加载视图并在另一个类中将其关闭?

时间:2011-07-14 17:55:14

标签: iphone uiview

我有3节课。一个是我在(类A)中显示加载视图的类,一个是我要在(类B)中解除加载视图的类,最后一个是加载视图对象本身。

在classA中,我可以通过调用下面显示的showLoadingViewWithView:方法来显示加载视图,但是当我到达classB并且我想要忽略我创建的相同加载视图时没有任何反应。

通过创建加载对象的实例,为其分配内存,然后[object methodCall]来调用每个方法;然后释放。

-(void)showLoadingViewWithView:(UIView *)currentView
{
CGRect transparentViewFrame = CGRectMake(0.0, 0.0,320.0,480.0);
loadingView = [[UIView alloc] initWithFrame:transparentViewFrame];
loadingView.backgroundColor = [UIColor grayColor];
loadingView.alpha = 0.9;

loadingSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
loadingSpinner.center = loadingView.center;
[loadingSpinner startAnimating];

UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 180, 320, 30)];
messageLabel.textAlignment = UITextAlignmentCenter;
messageLabel.text = @"Loading Please Wait...";
messageLabel.textColor = [UIColor whiteColor];
messageLabel.backgroundColor = [UIColor clearColor];
messageLabel.font = [UIFont boldSystemFontOfSize:15];

[loadingView addSubview:loadingSpinner];
[loadingView addSubview:messageLabel];

[currentView addSubview:loadingView];

[messageLabel release];
}




-(void)dismissLoadingView
{
[loadingSpinner stopAnimating];
[loadingView removeFromSuperview];
}

任何帮助都会非常棒。

1 个答案:

答案 0 :(得分:0)

特别是当您使用加载视图指示器时,通常会在一个位置显示指示器,并需要通知它在另一个地方关闭。为此(但不仅仅是),您应该使用NSNotifications。这就是你如何使用它。

在A类中,您可以创建通知观察者。通常在init方法中。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeLoadingView:) name:@"CloseLoadingView" object:nil];

然后你需要阻止closeLoadingView:方法在通知到达时实际关闭视图:

-(void)closeLoadingView:(NSNotification)notification{
  //Close the view
  [loadingSpinner stopAnimating];
  [loadingView removeFromSuperview];
}

当您不需要时,请记住删除观察者。通常会发生在dealloc中。

-(void)dealloc{
   [[NSNotificationCenter defaultCenter] removeObserver:self name:@"CloseLoadingView" object:nil];
}

现在在B类或您应用程序的enywhere中,只需发送通知即可关闭视图

[[NSNotificationCenter defaultCenter] postNotificationName:@"CloseLoadingView" object:nil];