gpt4 book ai didi

ios - Swift 从父 View 中删除 subview

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:43 25 4
gpt4 key购买 nike

我有一个 scrollView,我向它添加了一个 refreshcontroll。

self.refreshControl = UIRefreshControl()
self.refreshControl.attributedTitle = NSAttributedString(string: "Frissítéshez húzzad! :)")
self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.scrollView.addSubview(refreshControl)

在刷新方法中,我必须从 ScrollView 中删除所有 subview ,然后重新填充 ScrollView ..

self.refreshControl = UIRefreshControl()
self.refreshControl.attributedTitle = NSAttributedString(string: "Frissítéshez húzzad! :)")
self.refreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged)
self.scrollView.addSubview(refreshControl)

在我尝试拉动之后,我的 ScrollView 获得了新数据,但它不再有刷新控件。我认为这是因为当我从我的 ScrollView 中删除 subview 时,我也从中删除了 refreshcontroll。 (如果我在刷新方法中再次添加 refreshcontroll,我的 scrollview 将再次具有 refreshconroll)但是还有另一个问题。刷新 ScrollView 后向下移动..我附上图片:

这就是我删除 subview 的方式:

func refresh(sender:AnyObject)
{
//remove all subviews from scrollview..
let subViews = self.scrollView.subviews
for subview in subViews{
println("for removing...")
subview.removeFromSuperview()
}

println("refresh called..")
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
//remove all elements from the array
tstFrames.removeAll(keepCapacity: false)
//refresh data from webservice and adding it to tstFrames Array
wsServiceFeedTst()
//adding items to the scrollview from tstFramesArray
addPosts()
self.refreshControl.endRefreshing()

}

这是 ScrollView 在刷新之前的样子: enter image description here

这是刷新后的样子: enter image description here

谁能帮我解释一下为什么会下降?

谢谢!

谢谢,这是解决方案:

let subViews = self.scrollView.subviews
for subview in subViews{
println("for removing...")
if (subview is PostLineItem) {
subview.removeFromSuperview()
}
else {
println("not removing..")
}
}

最佳答案

通过删除所有 subview ,您还可以删除您明确添加的 subview 以外的 subview ,例如刷新 View 和布局约束。

(为了从评论中回答您的问题,布局约束实际上可以是 subview 。我在这里解释了如何删除除布局约束之外的所有 subview :https://stackoverflow.com/a/27281242/2274694。)

一般来说,我建议更改您的代码以使其更具体,以便仅删除您添加的 View 。例如,您可以将标签添加到您在 addPosts 方法中添加的 subview :

post.tag = 1000

然后在 refresh::

中仅删除带有该标签的 subview :
let subViews = self.scrollView.subviews
for subview in subViews{
if subview.tag == 1000 {
subview.removeFromSuperview()
}
}

确保您不会删除您自己未明确添加的任何 subview 。

编辑:事实证明 OP 添加的 subview 都是自定义类型 PostLineItem 所以标签是不必要的,因为我们可以删除所有 PostLineItem:

for subview in self.view.subviews {
if subview is PostLineItem {
subview.removeFromSuperview()
}
}

关于ios - Swift 从父 View 中删除 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30831444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com