如何识别显示的当前视图

时间:2008-12-17 17:51:40

标签: cocoa-touch

如果我有3个不同的视图,这些视图在3个相应的函数中定义,即:

- (UIView *)getView1 { /*...*/ }
- (UIView *)getView2 { /*...*/ }
- (UIView *)getView3 { /*...*/ }

当需要特定视图时,这些内容会添加到self.view

我的问题是,我们如何知道目前正在显示哪些观点?是否有一个参数可以识别哪个视图是当前视图?

3 个答案:

答案 0 :(得分:5)

您可以使用整数标记每个视图,然后读取标记以确定哪个视图处于活动状态(假设您要替换self.view)。

#define TAG_VIEW_1 1
#define TAG_VIEW_2 2
#define TAG_VIEW_3 3
...
[ [self getView1()] setTag:TAG_VIEW_1 ];
[ [self getView2()] setTag:TAG_VIEW_2 ];
[ [self getView3()] setTag:TAG_VIEW_3 ];
...    

if ( self.view.tag == TAG_VIEW_1 ) {
    // do something
}
else if ( self.view.tag == TAG_VIEW_2 ) {
    // etc
}
...

答案 1 :(得分:3)

假设您在更改它们时从self.view中删除了其他两个视图,您可以使用[self superview]来确定当前显示哪个视图。

答案 2 :(得分:1)

所有UIView都有一个window property,它在窗口中显示时设置,并在删除时设置为nil。您可以获取window属性的值以查看当前是否在窗口中显示视图:

BOOL isDisplayed = self.view.window != nil;

您还可以在UIView的子类中覆盖willMoveToWindow:,只要在窗口中添加或删除视图,就会调用它。