Установка положения прокрутки в UITableView

27
задан jszumski 16 April 2013 в 15:19
поделиться

2 ответа

Я думаю, что у меня есть подобное приложение: список объекта., коснитесь '+'-> новый экран, возвратитесь и см. обновленный список, прокрученный для показа добавленного объекта в нижней части.

, Таким образом, я поместил reloadData в viewWillAppear:animated: и scrollToRowAtIndexPath:... в viewDidAppear:animated:.

// Note: Member variables dataHasChanged and scrollToLast have been
// set to YES somewhere else, e.g. when tapping 'Save' in the new-item view.

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (dataHasChanged) {
        self.dataHasChanged = NO;
        [[self tableView] reloadData];
    } else {
        self.scrollToLast = NO; // No reload -> no need to scroll!
    }
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (scrollToLast) {
        NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([dataController count] - 1) inSection:0];
        [[self tableView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
    }
}

я надеюсь, что это помогает. Если Вы добавляете что-то посреди списка, Вы могли бы легко прокрутить к той позиции вместо этого.

61
ответ дан squelart 28 November 2019 в 04:36
поделиться

У Вас есть достаточно фиктивных контактов добавленным для тестирования прокрутки? Кажется, что только, когда Ваш tableView имеет определенный размер, iPhone находит, что inputus прокручивает.

Это - код, который работает на меня в моем проекте. Я использую предыдущую кнопку, и поэтому я прокручиваю tableview немного далее вниз, что он обычно шел бы с UITABLEVIEWSCROLLPOSITION. (моя предыдущая кнопка не будет работать, если она не может "видеть" предыдущую ячейку.

Игнорируют некоторые вызовы пользовательского метода.

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    //Show the navButtons
    [self navButtonAnimation];


    DetailsStandardCell *cell = (DetailsStandardCell *)textField.superview.superview.superview;

    self.parentController.lastCell = cell;


    //Code to scroll the tableview to the previous indexpath so the previous button will work. NOTE previous button only works if its target table cell is visible.
    NSUInteger row = cell.cellPath.row;
    NSUInteger section = cell.cellPath.section;

    NSIndexPath *previousIndexPath = nil;


    if (cell.cellPath.row == 0 && cell.cellPath.section != 0) //take selection back to last row of previous section
    {
    NSUInteger previousIndex[] = {section -1, ([[self.sections objectForKey:[NSNumber numberWithInt:section - 1]]count] -1)};
    previousIndexPath = [[NSIndexPath alloc] initWithIndexes:previousIndex length:2];   
    }
    else if (cell.cellPath.row != 0 && cell.cellPath.section != 0)
    {
        NSUInteger previousIndex[] = {section, row - 1};
        previousIndexPath = [[NSIndexPath alloc] initWithIndexes:previousIndex length:2];       

    }


    [self.theTableView scrollToRowAtIndexPath: cell.cellPath.section == 0 ? cell.cellPath : previousIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

}
0
ответ дан Adam Rosenfield 28 November 2019 в 04:36
поделиться