UITableView在UIViewController中重新排序单元格 - 重新排序控件未显示

时间:2012-11-19 22:58:33

标签: ios objective-c uitableview

我正在尝试使用UITableViewCell的2个类UITableView(第0部分有一行,第1部分有[self.dataArray count]行)。

我试过这些链接: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/ManageReorderRow/ManageReorderRow.html

reordering control in UITableView
Reorder control isn't displayed on table view

我添加了:

    -(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{   

    // Get the object we are going to move
    Task *task = [[Task alloc] init];
    task = [self.taskArray  objectAtIndex:[destinationIndexPath row]];

    // We will delete and move it to another location so well have to retain it
    //[task retain];

    // Remove it an move it to other place
    [self.taskArray removeObjectAtIndex:[sourceIndexPath row]];
    [self.taskArray insertObject:task atIndex:[destinationIndexPath row]];
}


     // Override to support conditional rearranging of the table view.
     - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath{
         if (indexPath.section == 1) {
             return YES;
         }
         return YES;
     }

我确实为每个UITableViewCell类添加了:

cell.showsReorderControl = YES;

但仍然没有运气,没有reaorderControl显示......任何人?有这么多教程,这对我来说非常紧急和烦人。

编辑:

我改变了一个主题以包含事实,我使用UIViewController而不是UITableViewController。

2 个答案:

答案 0 :(得分:14)

要在UITableView中实施行重新排序,您需要实施tableView:canMoveRowAtIndexPath:tableView:moveRowAtIndexPath:toIndexPath:,您可能还需要实施tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:

最重要的是,表格视图必须处于编辑模式才能显示重新排序控件。

答案 1 :(得分:0)

试试这个。 。 。这将处理在编辑模式下简单的tableview情况下单元格的排列和更新

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

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
     [tableData insertObject: [tableData objectAtIndex:sourceIndexPath.row] atIndex:destinationIndexPath.row];
     [tableData removeObjectAtIndex:(sourceIndexPath.row + 1)];
}