我有一个具有主视图的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
条件,可以解决但我是不确定。
您也可以查看我上传的图片以便更好地理解:
答案 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)
你真正可以做的是将主超级视图的大小与屏幕尺寸相同。给出明确的背景信息。使用与现在相同的内容视图。添加一个类似于超级视图的按钮,在单击选择器上,您可以从超级视图中删除视图。
通过识别触摸位置,还有其他方法可以做到这一点。但需要付出很多努力。
希望这会对你有所帮助。