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

     2023-03-12     176

关键词:

【中文标题】在多个部分中动态添加和删除行【英文标题】:Add and delete rows dynamically in multiple sections 【发布时间】:2012-06-02 01:32:11 【问题描述】:

我已经搜索和搜索,但我似乎无法找到我的问题的答案。我有一个包含 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 返回一个单元格。

我做错了什么?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

首先,你实际上从来没有+alloc-init 一个单元格,所以-cellForRowAtIndexPath: 很可能返回nil(-dequeueReusableCellWithIdentifier: 不会削减它)。

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

【讨论】:

你好科达菲。首先,感谢您回答并查看我的问题。让我看看我是否理解:在我的 cellForRowAtIndexPath 方法中,我必须正确分配一个单元格变量吗?但我不明白我在 TableView commitEditingStyle 方法中必须做什么。你有什么建议?谢谢 好吧,因为单元格被重复使用,我们 +alloc 仅当单元格为 nil 时(因此将其与 if 语句进行比较),而在 commitEditingStyle: 中,您的比较是古怪的。只需比较 [myArray count]-1

在 thymeleaf 中添加和删除具有多个元素的动态行并与列表绑定

】在thymeleaf中添加和删除具有多个元素的动态行并与列表绑定【英文标题】:addandremovedynamicrowswithmultipleelementsinthymleafandbindwithlist【发布时间】:2020-11-0805:21:27【问题描述】:我有一个带有对象数组列表的pojo类,我想使用jquery将... 查看详情

使用 Javascript 在动态添加删除行中计算行值和列值

】使用Javascript在动态添加删除行中计算行值和列值【英文标题】:CalculateRowValues&ColumnValuesinDynamicAddDeleteRowsUsingJavascript【发布时间】:2021-10-2508:23:01【问题描述】:我正在尝试使用JS执行以下功能。我已经达到了参与者总和的... 查看详情

在 SwiftUI 中使用绑定值添加和删除列表部分

】在SwiftUI中使用绑定值添加和删除列表部分【英文标题】:addandremovelistsectionsusingbindingvalueinSwiftUI【发布时间】:2020-12-0412:37:46【问题描述】:我尝试使用绑定值添加和删除列表中的部分,因此当添加或删除项目时,“listSectins... 查看详情

如何在 UICollectionView 的部分标题中动态添加标签和按钮?

】如何在UICollectionView的部分标题中动态添加标签和按钮?【英文标题】:HowtodynamicallyaddlabelsandbuttonsinsectionheaderofUICollectionView?【发布时间】:2016-06-1705:07:43【问题描述】:请帮助我如何水平添加标签和水平添加类似的按钮,但... 查看详情

在TabLayout(材料设计)android中动态添加和删除标签

】在TabLayout(材料设计)android中动态添加和删除标签【英文标题】:DynamicallyaddandremovetabsinTabLayout(materialdesign)android【发布时间】:2016-03-2206:17:15【问题描述】:我有一个TabLayout,里面有ViewPager。我需要在标签布局(材料设计)... 查看详情

Html 使用 javascript 动态添加和删除行

】Html使用javascript动态添加和删除行【英文标题】:Htmladdanddeleterowsdynamicallywithjavascript【发布时间】:2021-08-2822:55:18【问题描述】:我希望有一个最初没有行的表,然后动态创建每一行并能够删除每一行。我得到无法读取未定义... 查看详情

如何在html表中动态添加条目行?

】如何在html表中动态添加条目行?【英文标题】:Howtoaddentryrowwiseinhtmltabledynamically?【发布时间】:2020-02-2116:41:27【问题描述】:请建议如何通过Javascript点击添加按钮方法在html表格行中动态插入记录而不删除以前的行。JavaScript... 查看详情

使用jquery添加/删除后的动态行编号

...的php代码,我可以实现添加行,但是在删除时,重新索引部分折叠了echo"<inputtype=\'button\'value=\'AddTask\'id=\ 查看详情

在 Angular 中动态添加和删除组件

】在Angular中动态添加和删除组件【英文标题】:DynamicallyADDINGandREMOVINGComponentsinAngular【发布时间】:2017-12-0922:16:26【问题描述】:目前的官方文档只展示了如何在&lt;ng-template&gt;标签中动态更改组件within。https://angular.io/guide... 查看详情

如何在 React JS-Functional 组件中使用“Select-Drop down”、“Text Field”、“Text-Area auto size”添加和删除动态行

】如何在ReactJS-Functional组件中使用“Select-Dropdown”、“TextField”、“Text-Areaautosize”添加和删除动态行【英文标题】:Howtoaddandremovedynamicrowswith"Select-Dropdown","TextField","Text-Areaautosize"inReactJS-Function 查看详情

在具有多个表的 sqlite 数据库中删除行不起作用

】在具有多个表的sqlite数据库中删除行不起作用【英文标题】:Deletingrowinsqlitedatabasewithmultipletablesdoesn\'twork【发布时间】:2016-11-0923:29:05【问题描述】:我正在制作某种旅行应用程序,人们可以在其中添加城市,打开城市页面,... 查看详情

在无限循环中动态添加和删除类名

】在无限循环中动态添加和删除类名【英文标题】:AddingandremovingclassNamedynamicallyinaninifiniteloop【发布时间】:2020-11-2617:11:52【问题描述】:我构建了一个显示3张幻灯片的轮播。中间的显示宽度为100%,而左侧和右侧的显示宽度仅... 查看详情

Html表使用javascript动态添加和删除行[关闭]

】Html表使用javascript动态添加和删除行[关闭]【英文标题】:Htmltableaddanddeleterowsdynamicallywithjavascript[closed]【发布时间】:2021-08-2818:52:22【问题描述】:我希望有一个最初没有行的表,然后动态创建每一行并能够删除每一行。我得... 查看详情

jquery给表格动态添加删除行后如何获取数据

参考技术A一共有两种方式获取:1.当你点击添加按钮的时候。直接从后面取出表格和数据。下面付ajax方法。2.把你的数据保存在隐藏表单中,点击添加按钮的时候在从隐藏表单中把数据取出来添加到表格中。$.ajax(type:"get"... 查看详情

动态添加和删除输入

】动态添加和删除输入【英文标题】:Addinganddeletinginputsdynamically【发布时间】:2017-06-2315:37:30【问题描述】:我想将行添加到已经动态生成的公式中。这是我尝试做的:首先我生成视图:@foreach($itemsas$item)<divclass="form-groupcol-sm... 查看详情

tablesorter v2.0 在表中动态添加行

】tablesorterv2.0在表中动态添加行【英文标题】:tablesorterv2.0dynamicallyaddingrowsinatable【发布时间】:2016-11-2213:14:40【问题描述】:我们正在尝试在我们的解决方案中实现Tablesorterv2.0。我们在项目中使用了Knockout、MVC、C#。我们在整个... 查看详情

如何在 C 程序中使用 Gstreamer 在视频中动态添加和删除字幕

】如何在C程序中使用Gstreamer在视频中动态添加和删除字幕【英文标题】:HowtoaddandremovedynamicallysubtitleinvideowithGstreamerinaCprogram【发布时间】:2014-10-2910:07:31【问题描述】:对于一个学校项目,我必须用gstreamer和gtk做一个视频阅读... 查看详情

在 Knockoutjs 中动态添加行

】在Knockoutjs中动态添加行【英文标题】:DynamicallyAddRowsinKnockoutjs【发布时间】:2019-11-0303:02:15【问题描述】:我正在使用knockoutjs,并且我有2列QualificationList和Marks。单击“添加”按钮后,我想生成新行,单击“提交”按钮后,... 查看详情