2015-10-23 3 views
1

У меня есть простой табличный просмотр с только строками, содержащими текст (ячейки являются стандартными UITableViewCell, и я просто изменяю их атрибут .textLabel).touchsEnded не вызывается при прокрутке представления поверх табличного представления

Я программно добавил UIView к представлению таблицы и сделал его похожим на красный квадрат над столом. Я также присвоил этому квадратному представлению UIPanGestureRecognizer. Идея состоит в том, чтобы перетащить квадратный вид по всему виду таблицы.

Я вижу, как функции (переопределенные) касаютсяBegan и touchsCancelled вызываются нормально. touchesEnded вызывается только в том случае, если я не прокручиваю квадратный вид, это просто нажатие, без перетаскивания.

Прочитав подобные сообщения, я понял, что проблема в том, что UIGestureRecognizer распознает салфетки, которая переопределяет touchEnded, но я не знаю, как с этим бороться.

Большое спасибо за вашу помощь !!

Обновление для включения кода.

От TableViewController. Токен - это мой пользовательский вид, который я хочу перетащить (упомянутое выше «квадратное представление»).

override func viewDidAppear(animated: Bool) { 
    let token = Token(frame: CGRect(x: 10, y: 10, width: 20, height: 20), color: UIColor.redColor()) 
    self.view.addSubview(token) 
    self.view.bringSubviewToFront(token) 
} 

Токен, мой заказ Вид:

class Token: UIView { 
var lastLocation:CGPoint = CGPoint(x: 10, y: 10) 

init(frame: CGRect, color: UIColor) { 
    super.init(frame: frame) 
    self.backgroundColor = color 
    let panRecognizer = UIPanGestureRecognizer(target:self, action:"detectPan:") 
    self.gestureRecognizers = [panRecognizer] 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

func detectPan(recognizer:UIPanGestureRecognizer) { 
    let translation = recognizer.translationInView(self.superview!) 
    self.center = CGPointMake(lastLocation.x + translation.x, lastLocation.y + translation.y) 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("began") 
    // Promote the touched view 
    self.superview?.bringSubviewToFront(self) 

    // Remember original location 
    lastLocation = self.center 
} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("touchesEnded") 
} 

}

+0

Не могли бы вы показать какой-то код, как вы добавляете этот 'UIView' поверх' UITableView'. – Abhinav

+0

Там вы идете, сэр! Надеюсь, если этого достаточно. В противном случае, пожалуйста, скажите мне! Большое спасибо! –

+0

Попробуйте использовать свойство, о котором я упомянул, и вы должны получать прикосновения даже с помощью распознавателя жестов. – Abhinav

ответ

1

Существует свойство cancelsTouchesInView на UIPanGestureRecognizer. Установите его на NO, и он должен пройти донизу UIView.

Затем вы можете реализовать функцию touchesBegan для перемещения.

+0

Это сработало! Огромное спасибо!! :-)) –

+0

Рад, что это сработало. Рад был помочь. Приветствия! – Abhinav

Смежные вопросы