Распознать истинный indexPath длинного касания UITableViewCell - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь обнаружить ячейку табличного представления с длинным касанием в представлении коллекции.

У меня есть контроллер основного вида (класс MainVC), который содержит CollectionView (класс CollectionViewController).Представление коллекции имеет метку и TableView (класс TableViewController) для каждой ячейки.Методы делегатов представления коллекции реализованы внутри MainVC, а методы делегата tableView реализованы внутри класса CollectionViewController.

Я пытаюсь обнаружить tableViewCell indexPath (чтобы получить его содержимое) при долгом касании.

Код, выполняющий обнаружение (Inside CollectionViewController):

override func awakeFromNib() {
        super.awakeFromNib()
        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.longTapped(longPressGestureRecognizer:)))
        longPressRecognizer.delegate = self
        self.addGestureRecognizer(longPressRecognizer)
    }

func longTapped(longPressGestureRecognizer: UILongPressGestureRecognizer) {
    if longPressGestureRecognizer.state == UIGestureRecognizerState.began {
        let touchPoint = longPressGestureRecognizer.location(in: self)

        if let indexPath = self.eventsTableView.indexPathForRow(at: touchPoint) {
            print(indexPath.row) //print the current *displayed* cell index
        }
    }
}

Система распознает длинное нажатие , но я столкнулся с проблемой .Этот код:

let indexPath = self.tableView.indexPathForRow(at: touchedPoint)

, который предполагает распознать indexPath прослушиваемой ячейки, кажется, находит индекс прослушиваемой ячейки, который в данный момент отображает .Я имею в виду, что если есть 20 ячеек выше, которые в данный момент не отображаются устройством, indexPathForRow будет игнорировать их и считать только отображаемые ячейки.Так, например, если у меня есть 30 строк в табличном представлении, и пользователь в настоящее время просматривает ячейку в 23-й строке, система будет считать эту ячейку (например) в 4-й строке, потому что это 4-я ячейка, котораяв настоящее время отображается.

Я понятия не имею, есть ли связь с тем фактом, что этот tableView находится в представлении коллекции, но я надеюсь, что эта дополнительная информация поможет вам помочь (:

Многиеспасибо!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Попробуйте это:

var longpress = UILongPressGestureRecognizer()

override func viewDidLoad() {
        super.viewDidLoad()
        longpress = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressGestureRecognized))
        tableView.addGestureRecognizer(longpress)
 }

@objc func longPressGestureRecognized(gestureRecognizer: UIGestureRecognizer) {
        let longPress = gestureRecognizer as! UILongPressGestureRecognizer
        if longPress.state == UIGestureRecognizerState.began {
            let locationInTableView = longPress.location(in: tableView)
            let indexPath = tableView.indexPathForRow(at: locationInTableView)
            print(indexPath?.row ?? "-0")
        }
}
0 голосов
/ 05 июня 2018

didSelectRowAtIndexPath Я думаю, будет в вашей помощи.Проверьте, что это, и не забудьте делегировать tableView перед использованием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...