【问题标题】:Swift - remove/add UIView from superViewSwift - 从 superView 中删除/添加 UIView
【发布时间】:2020-04-28 22:45:21
【问题描述】:

在我的项目中,我有一个名为 MakeWishViewUIView,我通过点击这样的按钮让其出现:

@objc private func addWishButtonTapped(){
    print("addWishButton tapped")
    
    view.addSubview(makeWishView)
    
    makeWishView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    makeWishView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    makeWishView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    makeWishView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    
    makeWishView.grayView.transform =  CGAffineTransform(scaleX: 1.3, y: 1.3)
    makeWishView.visualEffectView.alpha = 0
    makeWishView.grayView.alpha = 0
    makeWishView.wishButton.alpha = 0
    makeWishView.closeButton.alpha = 0
    makeWishView.dropDownButton.alpha = 0
    makeWishView.wishNameTextField.alpha = 0
    makeWishView.wishImage.alpha = 0
    makeWishView.wishImageButton.alpha = 0
    makeWishView.linkTextField.alpha = 0
    makeWishView.priceTextField.alpha = 0
    makeWishView.noteTextField.alpha = 0
    makeWishView.linkImage.alpha = 0
    makeWishView.priceImage.alpha = 0
    makeWishView.noteImage.alpha = 0
    
        
    UIView.animate(withDuration: 0.3) {
        
        self.makeWishView.visualEffectView.alpha = 1
        self.makeWishView.grayView.alpha = 1
        self.makeWishView.wishButton.alpha = 1
        self.makeWishView.closeButton.alpha = 1
        self.makeWishView.dropDownButton.alpha = 1
        self.makeWishView.wishNameTextField.alpha = 1
        self.makeWishView.wishImage.alpha = 1
        self.makeWishView.wishImageButton.alpha = 1
        self.makeWishView.linkTextField.alpha = 1
        self.makeWishView.priceTextField.alpha = 1
        self.makeWishView.noteTextField.alpha = 1
        self.makeWishView.linkImage.alpha = 1
        self.makeWishView.priceImage.alpha = 1
        self.makeWishView.noteImage.alpha = 1
        
        self.makeWishView.grayView.transform = CGAffineTransform.identity
    }
    
}

我会这样驳斥这种观点:

func dismissView(){
    UIView.animate(withDuration: 0.3, animations: {
        self.grayView.transform =  CGAffineTransform(scaleX: 1.3, y: 1.3)
        self.visualEffectView.alpha = 0
        self.grayView.alpha = 0
        self.wishButton.alpha = 0
        self.closeButton.alpha = 0
        self.dropDownButton.alpha = 0
        self.wishNameTextField.alpha = 0
        self.wishImage.alpha = 0
        self.wishImageButton.alpha = 0
        self.linkTextField.alpha = 0
        self.priceTextField.alpha = 0
        self.noteTextField.alpha = 0
        self.linkImage.alpha = 0
        self.priceImage.alpha = 0
        self.noteImage.alpha = 0
    }) { (_) in
        self.visualEffectView.removeFromSuperview()
        self.grayView.removeFromSuperview()
        self.wishButton.removeFromSuperview()
        self.closeButton.removeFromSuperview()
        self.dropDownButton.removeFromSuperview()
        self.wishNameTextField.removeFromSuperview()
        self.wishImage.removeFromSuperview()
        self.wishImageButton.removeFromSuperview()
        self.linkTextField.removeFromSuperview()
        self.priceTextField.removeFromSuperview()
        self.noteTextField.removeFromSuperview()
        self.linkImage.removeFromSuperview()
        self.priceImage.removeFromSuperview()
        self.noteImage.removeFromSuperview()
        self.removeFromSuperview()
    }
}

问题是,如果我想再次点击addWishButtonMakeWishView 不会显示,而是一个空的view

我想我对如何关闭或添加UIView 有一个简单的误解。感谢任何帮助:)

【问题讨论】:

  • dismissView 是写在MakeWishView 类还是你的视图控制器类中?
  • MakeWishView
  • 解雇一次有效。但再次添加不起作用
  • 所以当dismissView 被调用时,你从来没有真正从its 超级视图中删除makeWishView?而且您从未将 alpha 值设置回 1?
  • 我以为我通过调用 self.removeFromSuperView() 删除了 makeWishView

标签: ios swift uiview


【解决方案1】:

你在这里删除子视图

    self.visualEffectView.removeFromSuperview()
    self.grayView.removeFromSuperview()
    self.wishButton.removeFromSuperview()
    self.closeButton.removeFromSuperview()
    self.dropDownButton.removeFromSuperview()
    self.wishNameTextField.removeFromSuperview()
    self.wishImage.removeFromSuperview()
    self.wishImageButton.removeFromSuperview()
    self.linkTextField.removeFromSuperview()
    self.priceTextField.removeFromSuperview()
    self.noteTextField.removeFromSuperview()
    self.linkImage.removeFromSuperview()
    self.priceImage.removeFromSuperview()
    self.noteImage.removeFromSuperview()
    self.removeFromSuperview()

您需要将视图的声明设为计算属性,而不是像这样存储的属性

var makeWishView:MakeWishView {
     ....
    return 
}

或仅在动画完成内执行此操作

 self.removeFromSuperView()

并设置回 alpha = 1

【讨论】:

  • 你到底是什么意思?我打电话给self.removeFromSuperView
  • 我更新了我的问题。我实际上将 alpha 设置回 1
  • 你vc里面的对象makeWishView在第一次点击时包含所有的子视图,所以当你完成关闭它时它会正确显示你删除同一个对象的子视图,所以当你再次添加它时它是空的您实际上删除了子视图,不仅将它们的 alpha 设置为 0
  • 他们的意思是你不需要从超级视图中删除所有子视图。只需从超级视图中删除整个MakeWishView,其子视图将自动删除。
  • @Chris 将它们设置为 1 而不是 0
【解决方案2】:

为什么要从他们的 superview 中删除以下视图?我没看到你再次添加它们

{ (_) in
    self.visualEffectView.removeFromSuperview()
    self.grayView.removeFromSuperview()
    self.wishButton.removeFromSuperview()
    self.closeButton.removeFromSuperview()
    self.dropDownButton.removeFromSuperview()
    self.wishNameTextField.removeFromSuperview()
    self.wishImage.removeFromSuperview()
    self.wishImageButton.removeFromSuperview()
    self.linkTextField.removeFromSuperview()
    self.priceTextField.removeFromSuperview()
    self.noteTextField.removeFromSuperview()
    self.linkImage.removeFromSuperview()
    self.priceImage.removeFromSuperview()
    self.noteImage.removeFromSuperview()
    self.removeFromSuperview()
}

我认为您只需要调用以下代码:

{ (_) in

    self.removeFromSuperview()

}

【讨论】:

  • 是的,这是我的错误,因为上面的答案已经建议了:) 谢谢!
  • 祝你好运:)
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2019-04-08
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多