我有按钮,当我点击该按钮时,会弹出一个视图。
testingButton.addTarget(self, action: #selector(popupTable), for: .touchUpInside)
@objc func popupTable(){
self.opaqueView = self.setUpPopView()
mainView.addSubview(opaqueView)
print("button clicked")
}
如果视图存在,我想再次单击该按钮并使视图消失。
if tinyView.isHidden == false {
tinyView.isHidden = false
self.testingButton.addTarget(self, action: #selector(removePopUp), for: .touchUpInside)
}else{
tinyView.isHidden = true
mainView.addSubview(tinyView)
}
它的确如此,但是当我第三次点击按钮时(弹出视图不存在)我希望弹出视图再次出现,但它不会出现。
显示弹出
func setUpPopView () -> UIView {
tinyView.backgroundColor = UIColor(red:0.99, green:0.99, blue:0.99, alpha:1.0)
tinyView.layer.cornerRadius = 3
tinyView.layer.masksToBounds = false
tinyView.layer.shadowColor = UIColor.black.withAlphaComponent(0.4).cgColor
tinyView.layer.shadowOffset = CGSize(width: 0, height: 0)
tinyView.layer.shadowOpacity = 0.9
let post: UIButton = UIButton(frame: CGRect(x: 5, y: 10, width: 150, height: 50))
post.backgroundColor = UIColor.clear
post.setTitleColor(UIColor.black, for:UIControlState.normal)
post.setTitle("All Post", for: .normal)
post.contentHorizontalAlignment = .left
post.addTarget(self, action: #selector(removePopUp), for: .touchUpInside)
tinyView.addSubview(post)
}
删除弹出窗口
@objc func removePopUp(_ sender: AnyObject){
self.tinyView.removeFromSuperview()
}
答案 0 :(得分:0)
您应该只使用一个操作,并检查操作中弹出视图的可见性。根据视图的可见性,您可以显示或隐藏弹出窗口。 像这样:
@objc func popupAction() {
If self.popUpView.isHidden {
// Pop up view is hidden, so show the pop up view again
} else {
// Pop up view is visible, so hide the pop up view
}
}
同样改变这个:
if tinyView.isHidden == false
{
tinyView.isHidden = false
self.testingButton.addTarget(self, action: #selector(removePopUp), for: .touchUpInside)
}else{
tinyView.isHidden = true
mainView.addSubview(tinyView)
}
有了这个:
if tinyView.isHidden == false
{
tinyView.isHidden = true
tinyView.removeFromSuperview()
}else{
tinyView.isHidden = false
mainView.addSubview(tinyView)
}
答案 1 :(得分:0)
您不应该致电removeFromSuperview
。你不应该说if
。这一切只会增加不必要的复杂性。
如果您的目标是显示和隐藏视图,只需显示并隐藏它:切换其隐藏,这是一个单行:
tinyView.isHidden = !tinyView.isHidden
这样,如果它不可见,它就会变得可见,如果它是可见的,它就会变得不可见。在Swift 4.2中,它甚至更简单:
tinyView.isHidden.toggle()
这就是全部!您不需要知道它是否已经隐藏,您不需要将其从superview中删除。没有if
,没有。每次要隐藏或显示它时,您只需将其隐藏性反转。