У меня есть простой табличный просмотр с только строками, содержащими текст (ячейки являются стандартными 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")
}
}
Не могли бы вы показать какой-то код, как вы добавляете этот 'UIView' поверх' UITableView'. – Abhinav
Там вы идете, сэр! Надеюсь, если этого достаточно. В противном случае, пожалуйста, скажите мне! Большое спасибо! –
Попробуйте использовать свойство, о котором я упомянул, и вы должны получать прикосновения даже с помощью распознавателя жестов. – Abhinav