UISwipeGestureRecognizer 未在 UITextView 上调用函数



>我有一个显示错误消息的UITextView对象。对象像通知一样从屏幕顶部下拉。默认情况下,它会保持静止 5 秒钟,然后返回到视图上方,然后从超级视图中删除。我已经在视图中添加了一个UISwipeGestureRecognizer,但是在测试时,没有调用附加的函数。谁能看出出了什么问题?

class ErrorMessage : UITextView {
override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
setupViews()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
private func setupViews() {
//ATTRIBUTES & CONSTRAINTS DECLARED HERE ETC...
self.isUserInteractionEnabled = true
self.isMultipleTouchEnabled = true
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(hideError))
swipeUp.direction = .up
self.addGestureRecognizer(swipeUp)
}
@objc func hideError() {
print(true)
}

这是我在不同的UIView上初始化代码的地方。

let errorMessage = TopMessage()
self.addSubview(errorMessage)
errorMessage.translatesAutoresizingMaskIntoConstraints = false
errorMessage.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 20).isActive = true
errorMessage.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -20).isActive = true
let bottomConstraint = NSLayoutConstraint(item: errorMessage, attribute: .bottom, relatedBy: .equal, toItem: rootVC.view.safeAreaLayoutGuide, attribute: .top, multiplier: 1.0, constant: 0)
NSLayoutConstraint.activate([bottomConstraint])
errorMessage.sizeToFit()
errorMessage.text = "⚠️ Too many reset attempts. Try again later."
//Custom Animation function that I created, just makes constraint changes so the object goes from being hidden above the top of the view, to being constrained to the top safe area.
errorMessage.present(rootVC: rootVC, bottomConstraint: bottomConstraint, relatedItem: rootVC.view.safeAreaLayoutGuide)
required init?(coder: NSCoder) {
super.init(coder: coder)
setupViews()
}

首先,你的类应该采用UIGestureRecognizerDelegate并将你的手势设置为委托。然后你应该添加一个UIGestureRecognizer,应该同时识别其他手势识别器函数。最后在所需的 init 中调用 setupViews((。

class ErrorMessage : UITextView, UIGestureRecognizerDelegate {
override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
setupViews()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
swipeGestureRecognizer()
}
private func setupViews() {
//ATTRIBUTES & CONSTRAINTS DECLARED HERE ETC...
self.isUserInteractionEnabled = true
self.isMultipleTouchEnabled = true
}
@objc func hideError() {
print(true)
}
func swipeGestureRecognizer() {
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(hideError))
swipeUp.delegate = self
swipeUp.direction = .up
self.addGestureRecognizer(swipeUp)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}

}

为我工作,我希望这会对你有所帮助。

我在这里找到了答案。

UIButton 在动画期间不交互

我删除了交互时正在对象上执行的动画,滑动开始工作。将 alpha 设置为更改为 0.1 而不是 0.0,并将选项设置为 .allowUserInteraction,使文本视图在动画时可交互。

最新更新