我正在以编程方式将点击手势识别器添加到自定义集合视图单元格类中。由于某种原因,它似乎不起作用。框架不为 0,isUserInteractionEnabled 设置为 true,并且我确保点击视图位于所有其他视图之上:
自定义单元格类:
let containerView: UIView = {
let view = UIView()
view.isUserInteractionEnabled = true
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
let tapView: UIView = {
let v = UIView()
v.isUserInteractionEnabled = true
return v
}()
let tap: UITapGestureRecognizer = {
let t = UITapGestureRecognizer(target: self, action: #selector(tapped))
return t
}()
@objc fileprivate func tapped() {
print("tap")
}
func setTap() {
self.containerView.addSubview(tapView)
tapView.frame = self.frame
// layout constraint code - printing frame shows its not 0 after this …Run Code Online (Sandbox Code Playgroud) uigesturerecognizer uitapgesturerecognizer uicollectionviewcell swift
我不得不创建一个新线程bcoz它让我发疯,所有其他在线答案都完全一样.我已经无数次地完成了这件事,但我无法看到我为生命而失踪的东西.我正在使用"测试"视图控制器只是为了让轻敲手势工作,但它根本不起作用...我相当确定我正确设置它,因为这是我一直在实现它的方式过去:(是的,我已经选中了isUserInteractionEnabled的方框).我甚至在一个不同的viewcontroller上以这种方式实现它,它正在工作......
class TestViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(tap)
}
let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
@objc func wasTapped() {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud)
}
我也尝试将参数添加到wasTapped:
@objc func wasTapped(gestureRecognizer: UITapGestureRecognizer) {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud) 我有一个 HomeController 和一个 registerController。HomeController 嵌入在导航控制器中,是根视图控制器。如果我在 HomeController 的 ViewWillAppear 中以模态方式呈现 registerController:
let reg = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "signup") as! RegisterController
reg.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
reg.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
reg.view.frame = self.view.frame
self.view.addSubview(reg.view)
Run Code Online (Sandbox Code Playgroud)
没有问题。但是如果我通过将其推送到导航控制器堆栈来呈现它:
let v = RegisterController()
self.navigationController?.pushViewController(v, animated: true)
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃并表示注册按钮的 IBOutlet(位于 registerController 中)为零。我重新创建了插座并清理了项目并重新启动了 xcode,但没有任何效果...