gpt4 book ai didi

ios - 如何快速从 UIScrollView 中的 super View 中删除 UIView 或 UIButton

转载 作者:行者123 更新时间:2023-11-29 00:46:31 26 4
gpt4 key购买 nike

我按照以下代码将 UIView 和 UIButton 添加为 UIScrollView 中的标签。将数据附加到 UIScrollView 中一切正常。问题是如何删除 UIScrollView 中的 UIView 和 UIButton。我确实删除了,但它并没有从 UI 中消失。请帮我看看怎么做。

这里是创建UIView & UIButton作为标签

    var xOffset: CGFloat = 0;
var i = 0;
for location in locationNameStrs {
let myString: NSString = location as NSString
let size: CGSize = myString.sizeWithAttributes([NSFontAttributeName: UIFont(name: "HelveticaNeue", size: 13)!])
outletView = UIView(frame: CGRectMake(xOffset, 10, size.width + 40, 40))
outletView.tag = i
outletStrs = UIButton(frame: CGRectMake(0, 5, outletView.frame.size.width, 25))
outletStrs.setTitle(location, forState: .Normal)
outletStrs.titleLabel?.textAlignment = NSTextAlignment.Center
outletStrs.backgroundColor = UIColor(red:0.00, green:0.45, blue:0.74, alpha:1.0)
outletStrs.layer.cornerRadius = 12.5
outletStrs.tag = i
outletStrs.addTarget(self, action: #selector(self.removeTags(_:)), forControlEvents: UIControlEvents.TouchUpInside)
outletStrs.titleLabel?.font = UIFont(name: "HelveticaNeue", size: 13)!

let closeImg = UIImageView (frame: CGRectMake(outletStrs.frame.size.width - 30, 0, 25, 25))
closeImg.image = UIImage(named: "close")
closeImg.contentMode = UIViewContentMode.Right
outletStrs.addSubview(closeImg)
outletView.addSubview(outletStrs)

tagScrollView.addSubview(outletView)
xOffset = xOffset + size.width + 50
i = i + 1
}

tagScrollView.contentSize = CGSizeMake(xOffset + 50, 50)

这里是删除,但问题是那些没有从 UI 中消失

func removeTags(sender: UIButton) {
let ok = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in
if self.locationNameStrs.contains(self.locationNameStrs[sender.tag]) {
self.locationNameStrs.removeAtIndex(sender.tag)
self.outletView.removeFromSuperview()
self.outletStrs.removeFromSuperview()
self.closeImg.removeFromSuperview()
self.addButton.removeFromSuperview()
self.displayOutletTags()
}
}
}

最佳答案

您没有正确使用警报 API。您遗漏了将其显示在屏幕上的重要部分—— View Controller 本身。你需要:

func removeTags(sender: UIButton) {
let alertBox = UIAlertController(title: "Removing tags", message: "I will now remove some tags.", preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: .Default) { (action:UIAlertAction!) in
guard sender.tag < self.locationNameStrs.count else {
print("Invalid tag index \(sender.tag)!")
return
}
self.locationNameStrs.removeAtIndex(sender.tag)
self.outletView.removeFromSuperview()
self.dislayOutletTags()
}
alertBox.addAction(okAction)
self.presentViewController(alertBox, animated: true, completion: nil)
}

没有警报,因为您似乎不希望这样:

func removeTags(sender: UIButton) {
guard sender.tag < self.locationNameStrs.count else {
print("Invalid tag index \(sender.tag)!")
return
}
self.locationNameStrs.removeAtIndex(sender.tag)
self.outletView.removeFromSuperview()
self.dislayOutletTags()
}

您不应该遍历 ScrollView 来删除找到的每个 View 。这是脆弱且笨拙的设计。您已经在跟踪添加的 View ,因此请按名称将其删除。

解决方案中的 isKindOfClass() 没有任何意义,因为根据定义, View 的 subview 都是 UIView 的子类。

同样,您的 if 语句没有任何意义,因为您正在查看数组中的一个项目,并询问该数组是否包含它。

关于ios - 如何快速从 UIScrollView 中的 super View 中删除 UIView 或 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558885/

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