2011-01-26 54 views
1

我有一个UIWebView,它是以编程方式绘制,并通过多个子视图(将视图添加到超级视图中)分配和显示。iOS SDK检查视图是否已经存在

这一切工作,但我有一个小问题:

如果2个不同的子视图显示此网页流量然后我得到2个网页视图,所以当1个视图驳回的WebView其他遗迹。我不想要这个。

本来我只想在superview类中实现webview,但它没有工作。

我怎样才能有网络视图检查,看看是否有更多的一个本身?

回答

11

webview实例只能添加到视图层次中一次。如果您一次在屏幕上显示两个网页浏览,则它们是两个不同的实例。您应该跟踪添加到层次结构中的这些实例,并且在关闭时从其超级视图中移除所有正在跟踪的实例。

您还可以抓取视图层次结构并查找UIWebView的实例。

for (UIView *subView in [myView subviews]) { 
    if ([subView isKindOfClass:[UIWebView class]]) { 
     [subView removeFromSuperview]; 
    } 
} 
0

MHM,不,等一下,这不是很清楚你的意思是什么?

你说:“......还有更多的则本身就是”和” ...被分配并通过多个子视图显示“

你可能意味着你有2个”同一个“UIWebView类的实例,但是你不应该把它们当作”生活在2个不同的超级视图中的同一个对象“......它们是不同的对象,每个人都有自己的属性...

还是我错过了站?所以,如果你的意思是我说的,你只是想从一个子视图控制(嗯...或者我们应该从它的UIViewController说)如果有其他视图使用UIWebView。 我可能会使用一个UIViewController的“父母”要加载我的子视图(最终他们也可以有自己的UIViewController,然后每一次我的Alloc和addSubview在我的子视图一个UIWebView我只需添加一个标签给它:

myWebView.tag = 11;

如果需要为下一个就可能会改变...... 的目的是为了能够控制如果我UIView有被分配一定的UIWebView, 现在我们可以做到这一点与这在我主母公司UIViewController:

for (UIView *view_level_1 in [self.view subviews]) { 

    for (UIView *view_level_2 in [view_level_1 subviews]) { 

     if (view_level_1 >= 10) { 

      // do something: dismiss this UIWebView too... 

     } 
    } 
} 

它j如果有一个子视图“标记”之前(标签是一种“名称/编号”),ust控制在我的mainViewControl视图的所有子视图中

我不确定您的子视图的结构可能这样,这不是你的问题很清楚,但你可以改变的代码采用它......

卢卡

0

使用UIView's isDescendantOfView方法来知道是否有子视图是当前存在于parentView。

if([addedSubView isDescendantOfView:parentView]) 
{ 
    //addedSubView is subview of parentView 
    //Take necessary action. 
} 
else 
{ 
    //addedSubView is not subview of parentView 
    //Take necessary action. 
}