У меня есть несколько жестов касания, которые создаются и распознаются в разных UIViews из моего TableViewController, и разные жесты распознаются правильно. Как видно из этого кода:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell
let tapOnView1 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
let tapOnView2 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
cell.View1.addGestureRecognizer(tapOnView1)
cell.View1.userInteractionEnabled = true
cell.View2.addGestureRecognizer(tapOnView1)
cell.View2.userInteractionEnabled = true
return cell
}
Мой кран с ручкой выглядит так:
func handleTap(sender:UITapGestureRecognizer) {
let tappedView = sender.view
self.tableView.beginUpdates()
if tappedView == cell.View1 {
print("View 1 Tapped")
} else if tappedView == cell.View2 {
print("View 2 Tapped")
}
}
Я хотел переместить весь этот код в свой класс CustomCell UITableViewCell, так как на самом деле есть еще несколько UIView, которые имеют разные действия, которые необходимо выполнять одним касанием. Кроме того, перемещение их всех в саму ячейку кажется мне правильным. Я искал ответы, но единственный правильный ответ, который я видел, — это использовать кнопки, и есть несколько причин, по которым это действительно не вариант для меня без серьезного рефакторинга и переписывания. Я пробовал несколько итераций следующего кода в моем классе CustomCell:
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
let tapOnView1 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
addGestureRecognizer(tapOnView1)
let tapOnView2 = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
addGestureRecognizer(tapOnView2)
}
и эта функция handleTap:
func handleTap(sender: UITapGestureRecognizer) {
if delegate != nil && item != nil {
if sender.view == view1 {
print("view1 tapped")
} else {
print("view2 tapped")
}
}
}
Tap для view1 никогда не вызывается. Он только когда-либо вызывает касание view2, независимо от того, где в ячейке я нажимаю. Я пытался использовать разные функции Selector (например, handleTapOne: для View1 и handleTapTwo: для View2), но я не могу понять, как это сделать.
Опять же, это работает в моем UITableViewController, но не работает, когда я пытаюсь переместить все распознаватели касаний в UITableViewCell.
Спасибо за помощь.
override func awakeFromNib()
выглядит неправильно, должен ли он бытьself.View1.addGestureRecognizer(tapOnView1)
? - person iphonic   schedule 02.09.2015