2015-04-11 2 views
1

Я столкнулся с проблемой при попытке изменить порядок строк в UITableView. У меня есть функция tableView:moveRowAtIndexPath:toIndexPath:, но fromIndexPath равно toIndexPath (т. Е. Источник == назначение). Я видел эту же проблему здесь: uitableview re-order won't work, source always equal to destination Но решение было - использовать другую библиотеку. Для меня это не вариант.Невозможно изменить порядок строк в UITableView

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { 
    //fromIndexPath is equal to toIndexPath, so nothing is exchaned 
    [self.table_data exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row]; 
} 

Моя таблица находится в режиме редактирования, я canMoveRowAtIndexPath: возвращение YES. Мое это не помогает. Почему? Что я делаю не так?

+0

Есть ли какие-либо изменения в значениях пути в зависимости от взаимного расположения рядов или являются ** всегда ** равны? –

+0

они всегда равны Не имеет значения, в какую строку в каком направлении я бы перетащил –

+0

FYI - вы не можете использовать 'exchangeObjectAtIndex: withObjectAtIndex:' для перемещения объекта. Этот метод меняет местами два объекта. Совсем не то, что вы хотите. – rmaddy

ответ

8

Проблема была в пользовательских панорамирование жест распознаватель. Это как-то было в конфликте с поведением строк перетаскивания

myGestureRecognizer.cancelsTouchesInView = NO; Установки исправил проблему

1

Попробуйте это. Оно работает.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    arr = [NSMutableArray arrayWithObjects:@"First",@"Second",@"Third",@"Fourth", nil];  
    self.tableView.editing = YES; 
} 

#pragma mark - Table view data source 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return arr.count; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier" forIndexPath:indexPath]; 

    UILabel *label = (UILabel *)[cell.contentView viewWithTag:100]; 
    [label setText:[arr objectAtIndex:indexPath.row]]; 

    return cell; 
} 

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { 
    return YES; 
} 

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath 
{ 
    NSString *stringToMove = arr[sourceIndexPath.row]; 
    [arr removeObjectAtIndex:sourceIndexPath.row]; 
    [arr insertObject:stringToMove atIndex:destinationIndexPath.row]; 
} 

Проверить скриншот -

enter image description here

enter image description here

+0

Да, это работает. Он работает над новым проектом, но он не работает в моем проекте. Я не знаю, в чем причина такого поведения –

+0

проблема была в пользовательском распознавателе жестов это как-то противоречило с функцией перетаскивания строк –

+0

Хорошо, так оно и было решено или нет? –

Смежные вопросы