tableView后使用触摸界面删除tableview:commitEditingStyle:forRowAtIndexPath:已被使用

时间:2011-09-28 20:08:16

标签: iphone ios uitableview

我正在覆盖tableView:commitEditingStyle:forRowAtIndexPath成为一个重置我的uitableviewcells中的文本标签的方法但是当用户接下来触摸uitableview时这会导致错误..它必须在它做任何事之前触摸一次(所以实际得到任何回复需要两次触摸。)

我希望有人可以帮助那些也处于类似情况的人;我的代码在下面..我已经将它下载到tableView:commitEditingStyle:forRowAtIndexPath方法,好像我注释掉tableview:titleForDeleteConfirmationButtonForRowAtIndexPath:方法同样的事情仍然发生..所以我认为我通过覆盖其他方法做错了。

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

// 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:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];

        //reset uitableviewcell textlabel with default input "empty"
        vehicleSearchObjectString = @"empty";
        [self.tableView reloadData]; //reloads the tabels so you can see the value.

    }   
    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
    }   
}

更新 这是我设置我的uitableviewcell textlabel

的地方
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"VehicleSearchCell" owner:self options:nil];
        cell = vehicleSearchCell;
        self.vehicleSearchCell = nil;
    }
    // Configure the cell...
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    if(indexPath.section == 0)
    {
        if(indexPath.row == 0)
        {
            UILabel *label1;
            label1 = (UILabel *)[cell viewWithTag:1];
            label1.text = @"Manufacture";

            UILabel *label2;
            label2 = (UILabel *)[cell viewWithTag:2];
            label2.text = vehicleSearchObjectString;
        }
//...

2 个答案:

答案 0 :(得分:0)

如果您使用此方法,则表示已启用对表的编辑,我建议检查禁用的位置/时间,因为这可能导致点击看起来像被忽略。

我要遵循的另一个方法是避免使用reloadData方法,该方法会触发很多事情,有时候开发人员无法控制。您已获得indexPath,因此您可以使用以下命令定位单个单元格以进行更新:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
表视图上的

我要调查的最后一件事是Apple对更新表的评论: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html#//apple_ref/doc/uid/TP40007451-CH10-SW1 它说commit ...方法必须调用方法:

deleteRowsAtIndexPaths:withRowAnimation: 

或类似的插入,但它不会发生,如果没有。

答案 1 :(得分:0)

所以我已经解决了这个问题!...我基本上删除了视图.hmxib再次启动,几乎将我的代码复制到文件中并且它完美地运行...我不知道为什么这可能发生在我身上当我第一次设置它的时候做了..我不确定......