Множественные жесты касания в UITableViewCell

У меня есть несколько жестов касания, которые создаются и распознаются в разных 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.

Спасибо за помощь.


person Rakote    schedule 02.09.2015    source источник
comment
Ваш код в override func awakeFromNib() выглядит неправильно, должен ли он быть self.View1.addGestureRecognizer(tapOnView1) ?   -  person iphonic    schedule 02.09.2015
comment
Ну я немного идиот. Спасибо. Это решило мою проблему. Я сходил с ума, и что-то настолько глупое, как это, удерживало меня. Спасибо за ответ.   -  person Rakote    schedule 02.09.2015


Ответы (1)


iphonic ответил на мой вопрос выше. Я был идиотом, наверное. долго смотрели на проблему и упускали самые простые вещи.

person Rakote    schedule 02.09.2015