私はUITapGestureRecogniserを扱うビューAを持っています。それが自分の上にあるときは、すべてがうまくいく。サブビュー時にTapGestureRecogniserが呼び出されない
私は、View Aオブジェクトの6つを保持する別のView Bを持っています。 ViewControllerにView Bを追加すると、UITapGestureRecogniserは機能しなくなります。
私はすべてのビューでisUserInteractionEnabled = true
を持っています。
誰もがなぜ機能しないのかを知ることができますか?
タッチ時にtapGestureが有効になっているかどうかを確認するにはどうすればよいですか?
おかげ
注:のViewControllerがそれにどんなUIGestureRecognisersを持っていない
SingleView
class QTSingleSelectionView: UIView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
fileprivate func initialize() {
let tap = UITapGestureRecognizer(target: self, action: #selector(onTapListener))
addGestureRecognizer(tap)
}
func onTapListener() {
print("tap")
_isSelected.toggle()
setSelection(isSelected: _isSelected, animated: true)
}
}
複数のビュー
class QTMutipleChoiceQuestionSelector: UIView {
var selectors: [QTSingleSelectionView] = []
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
fileprivate func initialize() {
for selector in selectors {
selector.removeFromSuperview()
}
selectors.removeAll()
guard let dataSource = dataSource else { return }
let count = dataSource.numberOfAnswers(self)
for index in 0..<count {
let selector = QTSingleSelectionView()
selector.frame = CGRect(x: 0, y: topMargin + heightOfSelector*CGFloat(index), width: frame.width, height: heightOfSelector)
selector.text = dataSource.mutipleChoiceQuestionSelector(self, textForAnswerAtIndex: index)
selector.selected = dataSource.mutipleChoiceQuestionSelector(self, isItemSelectedAtIndex: index)
selector.isUserInteractionEnabled = true
addSubview(selector)
}
}
}
ViewContro充填剤
lazy var multipleChoiceView: QTMutipleChoiceQuestionSelector = {
let selector = QTMutipleChoiceQuestionSelector()
selector.dataSource = self
selector.isUserInteractionEnabled = true
return selector
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.addSubview(multipleChoiceView)
}
? –
@AndréSlotta私はコードを追加しました。ありがとう – ilan
init()の代わりにinit(フレーム:CGRect)イニシャライザを呼び出さないために問題が発生しましたが、私の答えに反対しました。ビュー '、私はまた、私のコメントでは、あなたのマルチビューを確認するためにそれがジェスチャーレシーバーを受信したが、私の答えを投票ダウン! –