如何在超出界限时解雇UIView?

时间:2016-08-11 20:34:44

标签: ios swift view uiview

我有一个具有主视图的View Controller,我在右侧创建了一个小的下拉菜单(弹出菜单),也是UIView。我添加了一个按钮,在点击时显示和取消此弹出菜单视图。

一切正常。

但是现在我希望它在用户点击这些边界之外时忽略该视图。 目前的代码如下

var vw =  UIView()

func popup(){
    vw = UIView(frame: CGRectMake(self.view.frame.size.width - 210, 20, 260, 320))
    vw.backgroundColor = UIColor.whiteColor()
    vw.layer.cornerRadius = 5.0

    vw.layer.shadowColor = UIColor.blackColor().CGColor
    vw.layer.shadowOpacity = 0.8
    vw.layer.shadowRadius = 3.0
    vw.layer.shadowOffset = CGSizeMake(2.0, 2.0)
    let name: UILabel = UILabel(frame: CGRectMake(5, 0, 90, 30))
    name.text = testUserName
    name.font = UIFont(name: "Abc Lt", size: 20.0)
    let orgName: UILabel = UILabel(frame: CGRectMake(5, 35, 90, 30))
    orgName.text = "Abc Lt"
    name.font = UIFont(name: "V Lt", size: 25.0)
    let profileImageView: UIImageView = UIImageView(frame: CGRectMake(137, 4, 35, 35))
    profileImageView.image = UIImage(named: "profilepic.png")
    let dropUpButton: UIButton = UIButton(frame: CGRectMake(profileImageView.frame.origin.x + 42, 18, 15, 10))
    // dropUpButton.imageView.image = [UIImage imageNamed:@"dropdown.png"];
    dropUpButton.setImage(UIImage(named: "dropup.png"), forState: .Normal)
    dropUpButton.addTarget(self, action: #selector(LandingPageViewController.hideView), forControlEvents: .TouchUpInside)
    vw.addSubview(name)
    vw.addSubview(orgName)
    vw.addSubview(profileImageView)
    vw.addSubview(dropUpButton)

    self.drawLine()
    let tableView: UITableView = UITableView(frame: CGRectMake(0, 70, vw.frame.size.width, vw.frame.size.height-40), style: .Plain)
    tableView.delegate = self
    tableView.dataSource = self
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    tableView.scrollEnabled = false
    vw.addSubview(tableView)

    self.navigationController!.view!.addSubview(vw)
}

//the function that displays and dismiss the pop up menu

func hideView() {
    vw.hidden = true
}

我已经阅读了一些帖子,其中一个人可以使用点按手势来查找它所点击的位置,并根据使用if / else条件,可以解决但我是不确定。

您也可以查看我上传的图片以便更好地理解:

want to dismiss this alert when touched outside its bounds

2 个答案:

答案 0 :(得分:1)

You can use tap gesture to do that 

add this code on main view:

let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(_:)))
        tap.delegate = self
        self.view.addGestureRecognizer(tap)

and then

func handleTap(sender: UITapGestureRecognizer? = nil)
    {
        hideView()
    }

答案 1 :(得分:0)

你真正可以做的是将主超级视图的大小与屏幕尺寸相同。给出明确的背景信息。使用与现在相同的内容视图。添加一个类似于超级视图的按钮,在单击选择器上,您可以从超级视图中删除视图。

通过识别触摸位置,还有其他方法可以做到这一点。但需要付出很多努力。

希望这会对你有所帮助。