iOS SDK检查视图是否已存在

时间:2011-01-26 22:36:57

标签: iphone uiwebview

我有一个以编程方式绘制的UIWebView,并通过多个子视图分配和显示(webview被添加到superview)。

这一切都有效,但我有一个小问题:

如果2个不同的子视图显示此webview,那么我得到2个webview,因此当1个视图解除webview时,另一个视图仍然存在。我不想要这个。

最初我的想法是在superview类中实现webview,但它没有用。

如何检查网页浏览量以查看是否还有其中一个?

3 个答案:

答案 0 :(得分:11)

webview实例只能添加到视图层次结构一次。如果您同时在屏幕上显示两个Web视图,则它们是两个不同的实例。您应该跟踪添加到层次结构中的这些实例,当一个实例解除时,从超级视图中删除您正在跟踪的所有实例。

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

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

答案 1 :(得分:0)

嗯,不,等等,你的意思不太清楚......

你说:“......还有一个本身”和“......通过多个子视图分配和显示”

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

或者我误解了?

所以,如果你的意思是我说的,你只想控制一个subView(mhm ......或者我们应该说它的UIViewController),如果有其他视图使用UIWebView。 我可能会使用一个UIViewController“parent”来加载我的subViews(最终他们也可以拥有自己的UIViewController,然后每次我在我的subView中添加一个标签时,我的AllView和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...

        }
    }
}

如果之前有一个“标记”的子视图(标记是一种“名称/ ID”),它只控制我的mainViewControl视图的所有子视图

我不确定你的子视图的结构是什么样的,在你的问题中不是那么清楚,但是你可以改变采用它的代码......

卢卡

答案 2 :(得分: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.
}