Я думаю, что у меня есть подобное приложение: список объекта., коснитесь '+'-> новый экран, возвратитесь и см. обновленный список, прокрученный для показа добавленного объекта в нижней части.
, Таким образом, я поместил 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];
}
}
я надеюсь, что это помогает. Если Вы добавляете что-то посреди списка, Вы могли бы легко прокрутить к той позиции вместо этого.
У Вас есть достаточно фиктивных контактов добавленным для тестирования прокрутки? Кажется, что только, когда Ваш 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];
}