2

私は検索して検索しましたが、私の問題に対する答えが見つからないようです。3 行 (各行はセクション) の動的テーブルビューと、テーブルビューの右上にある編集ボタンがあります。ユーザーが編集をタップするたびに、行を追加または削除できる必要があります。+ボタンが新しい行を広告するためにテープで留められている部分を除いて、すべてが機能します。これは私のコードです:

- (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 からセルを返す必要があります。

私は何を間違っていますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

まず、実際にセルを作成することはないため、+allocnilを返す可能性があります(カットしません)。 -init-cellForRowAtIndexPath:-dequeueReusableCellWithIdentifier:

第二に、配列とテーブルはゼロベースである可能性があるため、との比較indexPath.row決して[myarray count]真ではありませんが、それらのカウントはそうではありません。

于 2012-06-02T01:50:01.550 に答える