Размах жест для UITableview - PullRequest
1 голос
/ 08 марта 2020

У меня такое чувство, что ответом будет "вы не можете этого сделать", но надежда зарождается вечно!

Одна сцена в моем приложении - UITableView; таблица представляет месяц, а каждая строка - день месяца. У меня есть небольшой UIView в верхней части таблицы с кнопками «Prev» и «Next». Выбор следующих результатов в таблице, отображающей следующий месяц, и Prev приводит к отображению предыдущего месяца. Все это прекрасно работает.

То, что я хотел бы сделать, это добавить левый и правый распознаватели жестов для перемещения из месяца в месяц, выполняя ту же функцию, что и кнопки «Предыдущий» и «Следующий». Обратите внимание, что с / с UITableViewCell ничего не происходит .

Когда я искал это в Интернете, кажется, что подавляющее число сообщений связано с обработкой распознавателей жестов в UITableViewCell. В моем случае это бесполезно.

Я использую Objective- C и Xcode 11.3.1.

Есть идеи?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 09 марта 2020

Ответ в объективе C

тот же ответ, что и у @Alan, но нет необходимости добавлять строку ниже в cellForRowAt методе

cell.isUserInteractionEnabled = false
cell.backgroundColor = .random()

Используйте метод ниже для жеста смахивания в TableView

 - (void)viewDidLoad
 {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UISwipeGestureRecognizer *leftGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftHandler)];
    [self.tableView addGestureRecognizer: leftGestureRecognizer];

    UISwipeGestureRecognizer *rightGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightHandler)];
    [self.tableView addGestureRecognizer: leftGestureRecognizer];

}

-(void) swipeLeftHandler
{
    NSLog(@"SWIPE Left");
// add same method which you call on next button’s click
}


-(void) swipeRightHandler{
    NSLog(@"SWIPE Right");
// add same method which you call on previous button’s click

}
1 голос
/ 08 марта 2020

Вы должны быть в состоянии сделать это. Отключив взаимодействие каждой ячейки, вы сможете передавать «UIGestureRecognizer» в tableView.

Вот краткий пример. Извините, я использовал Swift, но вы, вероятно, можете понять суть этого.

После добавления tableView я добавил эти жесты-распознаватели к нему.

let leftGesture = UISwipeGestureRecognizer(target: self, action: #selector(leftSwiped))
    leftGesture.direction = .left
    tableView.addGestureRecognizer(leftGesture)

    let rightGesture = UISwipeGestureRecognizer(target: self, action: #selector(rightSwiped))
    rightGesture.direction = .right
    tableView.addGestureRecognizer(rightGesture)

Каждая из них вызывает следующие функции:

@objc func leftSwiped() {
    print("LEFT")
}

@objc func rightSwiped() {
    print("Right")
}

и в ячейке для строки я просто отключил взаимодействие пользователя с ячейкой:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
    cell.isUserInteractionEnabled = false
    cell.backgroundColor = .random()
    return cell
}

Когда Я попробовал это, проведя вправо и влево на табличном представлении, будет печататься соответствующим образом в регистраторе.

Надеюсь, это поможет, Алан

0 голосов
/ 28 марта 2020

Проблема устранена.

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

Немного покопавшись, я обнаружил, что распознаватели раскадровки нужно было добавить в коллекции ссылок в моем табличном представлении. По какой-то причине этого не произошло, когда я добавил их изначально. Как только я подключил распознаватели к своему табличному виду, все заработало точно так, как и планировалось.

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