如何在不知道当前/主视图的情况下从后台线程打开新视图?

时间:2011-02-22 11:23:50

标签: iphone objective-c ios uiview uiviewcontroller

根据我的理解,任何打开的新视图都需要有父/超视图。

我有一个与服务器通信的后台线程,根据服务器的响应,它需要弹出警报并响应该警报需要调出一些UI。这可能发生在我的应用程序中的“任何地方”,因此我发现很难用父/超级视图提供这个新视图。

是否可以在不知道当前显示内容的情况下打开此新视图?是否有一种非侵入性的方法来检测当前视图并将其用作父/超级?

其中一个目标是不需要委托和其他观点中的任何内容。

2 个答案:

答案 0 :(得分:0)

获取当前可见视图的方式取决于控制器的设置,例如。您是否使用标签栏,导航控制器等。我认为最简单的方法是,如果您的后台线程在需要UI更改发生时在主线程上发送通知(使用NSNotificationCenter)。然后,View Controllers可以订阅此通知并处理UI更改。

通知只是一种通信方式,基本上你想要的是让你的模型后台线程以某种方式告知主线程上当前活动的视图控制器。你如何完全依赖于你的申请(再看第一句)。

答案 1 :(得分:0)

实际上您不需要视图,可以将其添加为应用代理窗口的子视图。

在您的申请代表中:

- (void) showView {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
    view.backgroundColor = [UIColor redColor ];
    [self.window addSubview:view];
    [view release];
}

然后,当您想要显示视图时:

MyAppDelegate *d = [[UIApplication sharedApplication] delegate];
[d showView];

完成后,您需要一种方法来解除视图,您可以使用

[self removeFromSuperview]