让弹出视图消失

时间:2018-06-15 01:32:24

标签: ios swift xcode

我有按钮,当我点击该按钮时,会弹出一个视图。

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()

}

2 个答案:

答案 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,没有。每次要隐藏或显示它时,您只需将其隐藏性反转。