IOS Swift3如何随机删除自定义UIView
我正在swift 3中构建一个iOS应用程序,在这里我正在创建动态UIView。我需要随机删除自定义视图。请帮帮我,我被这件事困扰了很长时间提前感谢IOS Swift3如何随机删除自定义UIView,ios,swift,uiview,Ios,Swift,Uiview,我正在swift 3中构建一个iOS应用程序,在这里我正在创建动态UIView。我需要随机删除自定义视图。请帮帮我,我被这件事困扰了很长时间提前感谢 class ViewController: UIViewController { var myView: subView! var y : CGFloat! @IBOutlet weak var addButton: UIButton! override func viewDidLoad() {
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)
}
}
正如您在上图中看到的,当我单击Close时,子视图(custome View)将关闭,但带有绿色的where As 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()
}
尝试按以下方式更改取消操作:
func cancelbutton(_ sender: UIButton)
{
if let myView = sender.superview {
myView.removeFromSuperview()
}
}
只需删除按钮的容器视图,而不是全局myView。您所做的错误是添加了多个子视图,而您选择的子视图并未删除。请修改您的代码,如下所示。 我所做的事情是,无论何时添加新的
子视图
,您都将设置其标记值,当您选择view以删除其标记值并在该标记值上放置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=上次添加的视图。不是要关闭/删除的视图。必需的init?(coder aDecoder:NSCoder){super.init(coder:aDecoder)Bundle.main.loadNibNamed(“子视图”,所有者:self,选项:nil)self.addSubview(self.views)Bundle.main.loadNibNamed(“子视图”,所有者:self,选项:nil)self.addSubview(self.views)}override init(frame:CGRect){super.init(frame:frame)Bundle.main.loadNibNamed(“子视图”,所有者:self,选项:nil)views.frame=bounds self.addSubview(self.views)}请将代码附加到问题(通过编辑)中,不要在注释中添加太多代码(因为缺少格式而无法读取)嘿,只是想一想,为什么不改用tableview呢……您可以直接在
myView.actionButton
上添加标记,是的,我添加了它。谢谢。如果((对象是子视图)和&subView.tag==selectViewTagValue){object.removeFromSuperview()}subView.tag…如何在这里设置标记,正确吗?因为我出错了,请再次检查我的代码我犯了一个小错误。如果((对象是子视图)和&object.tag==selectViewTagValue){object.removeFromSuperview()}根据情节提要,子视图直接包含按钮,这是删除视图本身的最简单方法,请像这样更新您的条件。为什么要否决它?我也不知道是谁投了反对票,你的答案是肯定的work@Anbu.Karthik,是的,我们无法阻止过于自信但又愚蠢的头脑在这种情况下,最好的方法是使用tableView,其中加载自定义单元。然后,无论何时删除一个单元格,其余单元格都会自动重新定位自身。