Objective-C:使用didSelectRowAtIndexPath

时间:2015-11-12 22:01:30

标签: ios objective-c uitableview

在我的TableView中,我允许用户使用滑动来删除他们的帖子:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
    }
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

但是,我还允许用户点击单元格以打开帖子的详细视图:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // segue and stuff
}

问题是,当用户滑动删除时,它还会触发didSelect方法并打开详细视图。如何确保didSelectRowAtIndexPath仅在点击时触发,而拖动滑动时删除触发器?

2 个答案:

答案 0 :(得分:0)

您还应该添加以下委托方法:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return YES - we will be able to delete all rows
    return YES;
}

整个实施将是

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return YES - we will be able to delete all rows
    return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}

根据您更新的问题,我会在tableview的右上方添加一个编辑按钮,通知用户删除所选的单元格。检查以下主题

这里也是很好的教程,值得检查

答案 1 :(得分:0)

如果您正在使用UITableViewController + UIStoryboard并连接您的详细信息视图segue以推入您的单元格原型选择插座,这将按预期工作(在滑动时不会调用didSelectRowAtIndexPath):

@interface TableViewController ()
@property (strong, nonatomic) NSMutableArray *cellTitles;
@end

@implementation TableViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.cellTitles = [@[@"Apple", @"Banana", @"Carrot", @"Millenium Falcon"] mutableCopy];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return self.cellTitles.count;
}


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

  cell.textLabel.text = self.cellTitles[indexPath.row];

  return cell;
}


// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    [self.cellTitles removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
  }
}