在多个部分中动态添加和删除行

时间:2012-06-02 01:32:12

标签: ios ipad uitableview

我搜索过并搜索过,我似乎无法找到问题的答案。我有一个动态的tableview,有3行(每行是一个部分)和tableview右上角的编辑按钮。每次用户点击编辑时,都必须能够添加或删除一行。除了按钮被贴在一个新行上之外,一切都有效。这是我的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{

return 3;
}


 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{

int count = [myarray count];
if (myarray != nil) count ++;
return count;

}


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

{     

id cell;
switch(indexPath.section) {
    case 0:
        if(indexPath.row==0) {
            static NSString *cellType1 = @"cellType1";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellType1];
            return cell;
        }
        break;

    case 1:
        if(indexPath.row==0) {
            static NSString *cellType2= @"cellType2";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellType2];
            return cell;
        }
        break;

    case 2:
        if(indexPath.row==0) {
            static NSString *cellType3= @"cellType3";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellType3];
            return cell;
        }
        break;
    default:
        break;
}
return cell;
}



- (IBAction) EditTable:(id)sender
{
if(self.editing)
{
    [super setEditing:NO animated:NO]; 
    [Table setEditing:NO animated:NO];
    [Table reloadData];
    [self.navigationItem.rightBarButtonItem setTitle:@"Edit"];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain];
}
else
{
    [super setEditing:YES animated:YES]; 
    [Table setEditing:YES animated:YES];
    [Table reloadData];
    [self.navigationItem.rightBarButtonItem setTitle:@"Ok"];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];
}
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView         editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{

if (self.editing == NO || !indexPath) return UITableViewCellEditingStyleNone;

if (self.editing && indexPath.row == ([myarray count])) 
{
    return UITableViewCellEditingStyleInsert;
} else 
{
    return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleNone;
}

- (void)tableView:(UITableView *)TableView commitEditingStyle:    (UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{

if (editingStyle == UITableViewCellEditingStyleDelete) 
{
    [myarray removeObjectAtIndex:indexPath.row];
    [Table reloadData];
} else if (editingStyle == UITableViewCellEditingStyleInsert)
{
    switch(indexPath.section) {
        case 0:

             if(indexPath.row==0) {
                static NSString *cellType1 = @"cellType1";
                UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:cellType1];
                [arry insertObject:cell atIndex:[myarray count]];
                [Table reloadData];

            }
            break;

        case 1:
            if(indexPath.row==0) {
                static NSString *cellType2= @"cellType2";
                UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:cellType2];
                [arry insertObject:cell atIndex:[myarray count]];

            }
            break;

        case 2:
            if(indexPath.row==0) {
                static NSString *cellType3= @"cellType3";
                UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:cellType3];
                [arry insertObject:cell atIndex:[myarray count]];

            }
            break;

        default:
            break;
    }

 }

如前所述,一切正常,直到我按下+按钮(按下编辑按钮时出现在左侧)添加新行。然后它显示一个错误:'UITableView dataSource必须从tableView:cellForRowAtIndexPath返回一个单元格。

我做错了什么?任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

首先,您实际上从未+alloc-init一个单元格,因此-cellForRowAtIndexPath:最有可能返回nil(-dequeueReusableCellWithIdentifier:不会删除它)。

其次,将indexPath.row[myarray count]进行比较永远不会为真,因为数组和表可能是从零开始的,但它们的计数不是。