开发者

issue with swiping a UITableViewCell

开发者 https://www.devze.com 2023-03-06 06:06 出处:网络
I would like to do some stuff when a user swipes to the right of a UITableViewCell, so I use - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

I would like to do some stuff when a user swipes to the right of a UITableViewCell, so I use

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath

However I tried to slide to the right and this didn't get invoked, why is this? All of my UITableView delegates are invoked.

I also have this in my code:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
 {
     return YES;
 }开发者_如何学Python


 // Override to support editing the table view.
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

}

All I want to do is to add a subview when a swipe happens


Do you have a tableView:commitEditingStyle:forRowAtIndexPath: method?

To quote Apple:

Note: A swipe motion across a cell does not cause the display of a Delete button 
unless the table view's data source implements the 
tableView:commitEditingStyle:forRowAtIndexPath: method.

And, deleting that method in my project also causes the willBeginEditing not to be called.


// You missed this?
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  return YES;
}


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


- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
  return @"Remove";
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
  }
}

Hope that helps.


Try adding this method to your tableView delegate methods:

    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
         if (editingStyle == UITableViewCellEditingStyleDelete) {
             // Delete the row from the data source.
             [self.listTableView beginUpdates];
...

I assume because your other delegate methods are being called that you included in your .h file @interface line? If using IB did you right click on the tableview and wire up delegate and dataSource?


Set the property of table view

tableView.editing = YES;
0

精彩评论

暂无评论...
验证码 换一张
取 消