Перейти на первое место в UITableView с помощью панели поиска

#ios

#iOS

Вопрос:

если я хочу, чтобы TableView отображался сверху, я использовал кнопку с этим кодом:

 [self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
  

Но на самом деле не очень здорово использовать кнопку для выполнения этого действия.

Есть ли лучший способ сделать это? Должен ли пользователь нажимать 2 раза, а затем переходить на вершину?

Каков наилучший способ 😉

Ответ №1:

Попробуйте посмотреть на scrollToRowAtIndexPath:atScrollPosition:animated Это, вероятно, лучшая идея, чем прокрутка с помощью scrollRectToVisible.

Комментарии:

1. Хорошо, но вопрос в том, каков наилучший способ активировать это действие для пользователя. Функция — (void)touchesBegan:(NSSet *)касается события withEvent:(UIEvent *) {} не работает. Как возможно, что это действие будет активировано, если пользователь (например) дважды нажмет на TableView.

2. Никто? Делать это с помощью кнопки действительно отвратительно.

3. Как насчет добавления UITapGestureRecognizer в табличное представление? Затем вы можете изменить значение для «numberOfTapsRequired», которое по умолчанию равно 1, на 2.

Ответ №2:

Спасибо за ответы, я решил проблему в строках. Если пользователь дольше нажимает на строку, он будет перемещен на вершину.

Вызовите это в своей функции

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

//Action -> long pressing on a Cell
        UILongPressGestureRecognizer *longPressGesture =
        [[[UILongPressGestureRecognizer alloc]
          initWithTarget:self action:@selector(longPress:)] autorelease];
        [cell addGestureRecognizer:longPressGesture];
}
  

Добавьте эту функцию в свой класс

 //Method
- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
    // only when gesture was recognized, not when ended
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        // get affected cell
        UITableViewCell *cell = (UITableViewCell *)[gesture view];

        // get indexPath of cell
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

        // do something with this action
        NSLog(@"Long-pressed cell at row %@", indexPath);

        //go to the first Row
        [self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
    }
}
  

Я надеюсь, что это кому-нибудь поможет.