IOS Swift3如何随机删除自定义UIView
Posted
技术标签:
【中文标题】IOS Swift3如何随机删除自定义UIView【英文标题】:IOS Swift3 how to Remove Custom UIView randomly 【发布时间】:2017-05-26 05:18:06 【问题描述】:我正在 swift 3 中构建一个 ios 应用程序,我正在创建动态 UIViews。我需要随机删除自定义视图。请帮助我,我被这个问题困扰了很长时间。 提前致谢
class ViewController: UIViewController
var myView: subView!
var y : CGFloat!
@IBOutlet weak var addButton: UIButton!
override func viewDidLoad()
y = 1
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
func cancelbutton(_ sender: UIButton)
myView.removeFromSuperview()
@IBAction func buttonAction(_ sender: Any)
y = y + 110
myView = subView(frame: CGRect(x: 80, y: y, width: 300, height: 100))
myView.backgroundColor = UIColor.green
myView.actionButton.addTarget(self, action: (#selector(cancelbutton(_:))), for: UIControlEvents.touchUpInside)
self.view.addSubview(myView)
正如您在上图中看到的那样,当我单击关闭时,SubView(custome View) 会关闭,但是带有绿色的 MyView 不会消失并停留在那里。有人请帮忙.........
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
Bundle.main.loadNibNamed("subView",owner: self, options:nil)
self.addSubview(self.views)
Bundle.main.loadNibNamed("subView",owner: self, options:nil)
self.addSubview(self.views)
override init(frame: CGRect)
super.init(frame: frame)
Bundle.main.loadNibNamed("subView", owner: self, options: nil)
views.frame = bounds
self.addSubview(self.views)
@IBAction func buttonAction(_ sender: Any)
views.removeFromSuperview()
【问题讨论】:
您在 subView 类中添加了什么代码? 您正在持有 myView = 您添加的最后一个视图。不是您要关闭/删除的视图。 需要初始化?(coder aDecoder: NSCoder) super.init(coder: aDecoder) Bundle.main.loadNibNamed("subView",owner: self, options:nil) self.addSubview(self.视图) Bundle.main.loadNibNamed("subView",owner: self, options:nil) self.addSubview(self.views) override init(frame: CGRect) super.init(frame: frame) Bundle.main.loadNibNamed ("subView", owner: self, options: nil) views.frame = bounds self.addSubview(self.views) 请在问题中附加代码(通过编辑),而不是在 cmets 中添加太多代码(因为缺少格式,它变得不可读) 嘿,只是想想你为什么不使用 tableview 来代替...... 【参考方案1】:您做错的事情是您添加了子视图的多个视图,而您选择的原因并未删除。请修改您的代码,如下所示。
我所做的是,每当您添加新的subView
时,您还将设置其标记值,当您选择视图以删除其标记值并在该标记值上放置if
语句。
class ViewController: UIViewController
var myView: subView!
var y : CGFloat!
var tag : Int = 0
@IBOutlet weak var addButton: UIButton!
override func viewDidLoad()
y = 1
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
func cancelbutton(_ sender: UIButton)
let selectViewTagValue : Int = sender.tag /// save the selected view tag value
for object in self.view.subviews
if ((object is subView) && object.tag == selectViewTagValue)
object.removeFromSuperview()
@IBAction func buttonAction(_ sender: Any)
y = y + 110
myView = subView(frame: CGRect(x: 80, y: y, width: 300, height: 100))
myView.tag = tag
myView.actionButton.tag = tag
tag = tag + 1
myView.backgroundColor = UIColor.green
myView.actionButton.addTarget(self, action: (#selector(cancelbutton(_:))), for: UIControlEvents.touchUpInside)
self.view.addSubview(myView)
【讨论】:
可以直接在myView.actionButton
上加标签
是的,我添加了它。谢谢。
if ((object is subView) && subView.tag == selectViewTagValue) object.removeFromSuperview() subView.tag ...我如何在这里设置标签,这是正确的吗?出错
请再次检查我的代码,我犯了一个小错误。以及您现在面临的错误类型。
请像这样更新你的条件 if ((object is subView) && object.tag == selectViewTagValue)object.removeFromSuperview() 【参考方案2】:
尝试像这样更改取消操作:
func cancelbutton(_ sender: UIButton)
if let myView = sender.superview
myView.removeFromSuperview()
只需删除按钮的容器视图,而不是全局 myView。
【讨论】:
根据情节提要,子视图直接包含按钮,这是删除视图本身的最简单方法。为什么投了反对票?我不明白。 是的,我也不知道是谁投了反对票,你的答案会起作用 @Anbu.Karthik,是的,我们无法阻止过度自信但愚蠢的头脑。 ;)【参考方案3】:我设法修复了删除问题,但目前我无法重新定位海关视图的位置,如下图所示,请帮助我。
【讨论】:
在这种情况下,最好的方法是使用在其中加载自定义单元格的 tableView。然后,每当您删除一个单元格时,剩余的单元格就会自动重新定位。以上是关于IOS Swift3如何随机删除自定义UIView的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 3 在 UIView 中覆盖 requiresConstraintBasedLayout?