我有一个以编程方式绘制的UIWebView,并通过多个子视图分配和显示(webview被添加到superview)。
这一切都有效,但我有一个小问题:
如果2个不同的子视图显示此webview,那么我得到2个webview,因此当1个视图解除webview时,另一个视图仍然存在。我不想要这个。
最初我的想法是在superview类中实现webview,但它没有用。
如何检查网页浏览量以查看是否还有其中一个?
答案 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.
}