У меня есть список изображений внутри ячейки, в пределах UITableView
. По причинам, по которым я не буду идти (слишком много), я не могу использовать didSelectRowAtIndexPath
, чтобы узнать, какой из них был выбран из-за того, что я использую сторонний модуль, который добавляет собственные родительские жесты, и я не могу установить cancelsTouchesInView = false
(что может технически решить мою проблему).Swift: получить произвольную информацию от UITapGestureRecognizer
В любом случае, есть способ добавить произвольную информацию в представление, так что, когда я получу ее как sender
, я мог бы ее осмотреть.
Например: если это был HTML & JavaScript, вы могли бы это сделать.
$(myImage).data('foo', 'bar')
$(anotherImage.data('foo', 'thunk')
$('img').on('click', function() {
console.log($(this).data('foo')) // could be "foo" or "thunk"
})
В Swift
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = MyCustomTableViewCell()
cell.userInteractionEnabled = true
let tapped = UITapGestureRecognizer(target: self, action: Selector("myCallback:"))
cell.addGestureRecognizer(tapped)
// my imaginary world...
cell.foo = self.extraData[indexPath.row]
return cell
}
func myCallback(sender: AnyObject?) {
println(sender.foo)
}
Очевидно, что выше не работает, но есть способ добиться того, что я пытаюсь сделать?
Отлично! Это работало как шарм. Кроме того, любая причина не устанавливать жест, признанный в ячейке? Он отлично работал в моем примере (это означает, что я получил обратный вызов). – ded
Я думаю, что он все равно будет работать, даже если вы установите распознаватель на ячейку тоже. Однако хорошей практикой всегда работать над 'contentView', а не с самой ячейкой в соответствии с [Apple docs] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITableViewCell_Class/index .html # // apple_ref/occ/instp/UITableViewCell/contentView) – ozgur
Извините. Не знал, что я могу это сделать. Я довольно уверен, что пользователи с <= 200 не могут принять ответ в течение нескольких дней – ded