Sneha
Sneha

Reputation:

reordering control in UITableView

I am developing a game in which I am using a UITableView which has custom cell (UItableViewCell subclass).

In editing mode: Only the reordering control of the UITableView should show.

Right now I am getting the delete and the reordering control.

How to get only reordering control while editing ?

Upvotes: 22

Views: 11520

Answers (5)

Bartosz
Bartosz

Reputation: 1604

Swift 5.0

If you want to disable all other editing options for your tableView's cells except the one that allows you to reorder them then just implement those methods from UITableViewDelegate:

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    true
}

// Removes the ability to delete current cell
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    .none
}

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
    true
}

Upvotes: 2

Sneha
Sneha

Reputation: 1444

thanks a lot oxigen it worked .... i was writing this in

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     static NSString *CellIdentifier = @"Cell";

     UITableViewCell *cell = [tableView1 dequeueReusableCellWithIdentifier:CellIdentifier];

     if (!cell) {
         cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
     }

     cell.showsReorderControl = YES; // to show reordering control

    return cell;
}

but i dint write the method which you have given

Thanks a tons

Upvotes: 4

oxigen
oxigen

Reputation: 6263

 tableView.showsReorderControl = YES; // to show reordering control

To dissmiss delete control, in your UITableViewDelegate add

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}

Upvotes: 1

lomec
lomec

Reputation: 1354

You should use this method for hiding delete button.

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}

Upvotes: 4

Mousa
Mousa

Reputation: 3036

I know this answer might be late, but I'm putting it just for people who still need it. Just implement the following methods:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{

}

Upvotes: 65

Related Questions