- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有表格的叠加层,我想在背景中添加一个 Tap 手势识别器以关闭 View ,并将 Target 添加到叠加层中的一个按钮,它做同样的事情。
叠加层按预期正常显示,但是每当我点击黑色背景或取消按钮时,没有任何反应。我在这里搜索了答案,但没有找到任何有效的方法。我的代码如下,后面附上覆盖图的截图:
class importedFileView: NSObject {
let blackView = UIView()
let importedFileContainerView: UIView = {
let importedFileContainerView = UIView(frame: .zero)
importedFileContainerView.backgroundColor = .white
importedFileContainerView.layer.cornerRadius = 10
importedFileContainerView.layer.masksToBounds = true
return importedFileContainerView
}()
let headerLabel: UILabel = {
let headerLabel = UILabel()
headerLabel.translatesAutoresizingMaskIntoConstraints = false
headerLabel.font = UIFont(name: "HelveticaNeue-Thin" , size: 24)
headerLabel.text = "Attach file"
headerLabel.textColor = .darkGray
headerLabel.adjustsFontSizeToFitWidth = true
return headerLabel
}()
let fileTableView: UITableView = {
let fileTableView = UITableView()
return fileTableView
}()
let updateDetailsButton: UIButton = {
let updateDetailsButton = UIButton()
updateDetailsButton.translatesAutoresizingMaskIntoConstraints = false
updateDetailsButton.backgroundColor = UIColor(r:40, g:86, b:131)
updateDetailsButton.setTitleColor(UIColor.white, for: .normal)
updateDetailsButton.setTitle("Attach selected files", for: .normal)
updateDetailsButton.titleLabel!.font = UIFont(name: "HelveticaNeue-Light" , size: 18)
updateDetailsButton.layer.cornerRadius = 2
return updateDetailsButton
}()
let cancelButton: UIButton = {
let cancelButton = UIButton()
cancelButton.translatesAutoresizingMaskIntoConstraints = false
cancelButton.backgroundColor = UIColor.white
cancelButton.setTitleColor(UIColor(r:40, g:86, b:131), for: .normal)
cancelButton.setTitle("Cancel", for: .normal)
cancelButton.titleLabel!.font = UIFont(name: "HelveticaNeue-Light" , size: 18)
cancelButton.layer.cornerRadius = 2
return cancelButton
}()
let frameHeight: CGFloat = 450
func showFormView(){
if let window = UIApplication.shared.keyWindow {
blackView.backgroundColor = UIColor(white: 0, alpha: 0.5)
window.addSubview(blackView)
window.addSubview(importedFileContainerView)
importedFileContainerView.addSubview(headerLabel)
importedFileContainerView.addSubview(fileTableView)
importedFileContainerView.addSubview(updateDetailsButton)
importedFileContainerView.addSubview(cancelButton)
cancelButton.addTarget(self, action: #selector(handleDismiss), for: .touchUpInside)
blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))
layoutViews()
fileTableView.frame = CGRect(x: 30, y: window.frame.height, width: window.frame.width - 60, height: 230)
let frameY = (window.frame.height - frameHeight) / 2
importedFileContainerView.frame = CGRect(x: 20, y: window.frame.height, width: window.frame.width - 40, height: self.frameHeight)
blackView.frame = window.frame
blackView.alpha = 0
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
self.blackView.alpha = 1
self.importedFileContainerView.frame = CGRect(x: 20, y: frameY, width: window.frame.width - 40, height: self.frameHeight)
}, completion: nil
)
}
}
func layoutViews(){
let views = ["v0" : headerLabel, "v1": fileTableView, "v2": updateDetailsButton, "v3": cancelButton]
let leftSpace = NSLayoutConstraint.constraints(withVisualFormat: "H:|-20.0-[v0]-20.0-|", options: NSLayoutFormatOptions(), metrics: nil, views: views)
let leftSpace1 = NSLayoutConstraint.constraints(withVisualFormat: "H:|-20.0-[v1]-20.0-|", options: NSLayoutFormatOptions(), metrics: nil, views: views)
let leftSpace2 = NSLayoutConstraint.constraints(withVisualFormat: "H:|-20.0-[v2]-20.0-|", options: NSLayoutFormatOptions(), metrics: nil, views: views)
let leftSpace3 = NSLayoutConstraint.constraints(withVisualFormat: "H:|-20.0-[v3]-20.0-|", options: NSLayoutFormatOptions(), metrics: nil, views: views)
let topSpacing = NSLayoutConstraint.constraints(withVisualFormat: "V:|-20.0-[v0(40)]-20.0-[v1(230)]-20.0-[v2(50)]-10.0-[v3(50)]-10.0-|", options: NSLayoutFormatOptions(), metrics: nil, views: views)
importedFileContainerView.addConstraints(topSpacing)
importedFileContainerView.addConstraints(leftSpace)
importedFileContainerView.addConstraints(leftSpace1)
importedFileContainerView.addConstraints(leftSpace2)
importedFileContainerView.addConstraints(leftSpace3)
}
func handleDismiss() {
UIView.animate(withDuration: 0.5,
delay: 0.0,
options: .curveEaseInOut,
animations: {
self.blackView.alpha = 0
if let window = UIApplication.shared.keyWindow {
self.importedFileContainerView.frame = CGRect(x: 20, y: window.frame.height, width: window.frame.width - 40, height: self.frameHeight)
}
},
completion: { [weak self] finished in
self?.blackView.removeFromSuperview()
self?.importedFileContainerView.removeFromSuperview()
})
}
override init() {
super.init()
}
}
最佳答案
self.blackView.isUserInteractionEnabled = true;
是您需要添加到 blackView
(UIView
)的所有内容。
否则, View 不会启用任何交互,因此不会触发手势识别器的目标/ Action 。
事件被忽略。
https://developer.apple.com/reference/uikit/uiview/1622577-isuserinteractionenabled
您可能还想在动画期间禁用它。
关于ios - addTarget 和 addGestureRecognizer 不工作,没有崩溃/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40976432/
我的类(class): class SelectBox { internal static func openSelector(list:[String: String], parent:UI
每次 viewWillAppear 它调用self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer
代码: for ... { let view = CategoryClass.createMyClassView() view.myLabel.text = packTitle vi
我有一个函数可以创建一个带有选择器函数的按钮作为目标。按钮的地址被传递给 handleSelectPhoto。 lazy var image1Button = createButton(selecto
这个问题在这里已经有了答案: iOS: Adding UITapGestureRecognizer to container view intercepts UICollectionView's d
下面的代码是使用 viewController 实现的,我可以为 Apple Watch 做同样的事情并添加动画吗? let filteredSubviews = self.view.subviews
我正在尝试在 tableView 单元格内的 UILabel 中添加点击事件,如下所示。 let tap = UITapGestureRecognizer(target: self, action:
我是 iOS 新手,swift。我的 tableView 中有两个部分。我希望能够在第二部分而不是第一部分执行 longPressGesture,使用户能够在第二部分中重新排序 tableview 单
我正在尝试在我的滑动菜单库应用程序中使用 SWRevealViewController,但我需要使用一个选项编辑库,我将解释如下。当使用 addgestureRecognizer 并通过从左向右按住然
我正在尝试将手势识别器添加到主视图,但出现此错误: 'ViewController' 没有可见的@interface 声明选择器 addGestureRecognizer 错误 在这条线上: [se
我有一个带有表格的叠加层,我想在背景中添加一个 Tap 手势识别器以关闭 View ,并将 Target 添加到叠加层中的一个按钮,它做同样的事情。 叠加层按预期正常显示,但是每当我点击黑色背景或取消
我有带有嵌入式 UICollectionView 的 UITableView。在第一部分中,有带有 UITextField 的自定义单元格,在第二部分中有 UICollectionView。 当用户点
我正在使用 UIScrollView 和 UIStackView 水平滚动并选择一个 UIControl 元素。 我在 UIStackView 中的 UIControl 元素上设置了 addTarge
问题 centerLabelGesture 被定义在 viewDidLoad() 的范围之外,所以在调用 .addGestureRecognizer(centerLabelGesture) 时, ce
我以这种方式实现了带有 UIGestureRecognizer 的 ViewController: // Extension for GestureRecognizer extension UIVie
我是一名优秀的程序员,十分优秀!