Перемещение строки UITableView в начало списка при выборе - PullRequest
1 голос
/ 04 августа 2009

Я уверен, что это легко сделать. Я очень плохо знаком с задачей C (подобрал работу, которую босс собирался передать на аутсорсинг) и мог использовать любую помощь, которую смогу получить. Просто укажи мне правильное направление здесь. По сути, я хочу настроить следующее:

У меня есть список телефонных номеров, который расширяется до необходимого количества строк. У меня нет проблем с заполнением, и список работает нормально, но я бы хотел, чтобы все недавно выбранные элементы в списке были более доступны в верхней части. Таким образом, всякий раз, когда пользователь "didSelectRowAtIndexPath", я бы хотел, чтобы строка перемещалась наверх.

Я просто ЗНАЮ, что это очень просто ... но я пока не нашла решения. Не торопись. Я просто пытаюсь все выяснить самостоятельно. Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 04 августа 2009

За порядок элементов отвечает источник данных (ваш код), а не табличное представление. Если вы хотите изменить порядок вещей, то вам нужно изменить порядок структуры данных, которую вы используете для управления -cellForRowAtIndexPath:. Если вы хотите анимацию, я не верю, что есть хорошая анимация движения. Лучшее, что вы можете сделать (легко), это выполнить удаление и вставку. См. Пакетная вставка и удаление строк и разделов для получения подробной информации о том, как анимировать это. Несколько месяцев назад я спросил разработчиков UITableView об общей нестабильности и хрупкости этих анимаций в OS2.x, и они заверили меня, что много работы ушло на улучшение этого в OS3. Надеюсь, вы можете просто следовать документации, и она больше не будет падать.

2 голосов
/ 04 августа 2009

Нет возможности удалить строку из одного места в таблице в другое. Его можно эмулировать, удалив строку и добавив ее обратно в новом месте:

// Remove the row from your datasource here
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:sourcePath] withRowAnimation:UITableViewRowAnimationLeft];
// Add the row back into the datasource here
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:destPath] withRowAnimation:UITableViewRowAnimationLeft];

Замените комментарии соответствующими командами для обновления источника данных

0 голосов
/ 23 апреля 2010

Попробуйте (список рабочих кодов):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if( indexPath.row == 0 ) return;

NSString * selectedNum = [numbers objectAtIndex:indexPath.row];  // NSMutableArray* numbers = dataStore
[selectedNum retain];

[numbers removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
           withRowAnimation:UITableViewRowAnimationLeft];
[numbers insertObject:selectedNum atIndex:0];
[tableView insertRowsAtIndexPaths:[NSArray
           arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]]
           withRowAnimation:UITableViewRowAnimationLeft];

[selectedNum release]; 

}

0 голосов
/ 04 августа 2009

UITableView имеет метод с именем

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath

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

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