gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:57:00 27 4
gpt4 key购买 nike

我进行了搜索,但似乎找不到解决我问题的答案。我有一个包含3行(每行都是一个部分)的动态tableview,并且在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数据源必须从tableView:cellForRowAtIndexPath返回一个单元格。

我究竟做错了什么?非常感激任何的帮助。

最佳答案

首先,您实际上不会实际上对一个单元格进行+alloc-init,因此-cellForRowAtIndexPath:最有可能返回nil(-dequeueReusableCellWithIdentifier:不会剪切它)。

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

关于ios - 在多个部分中动态添加和删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com