如何动态添加Section和TableView Cell
Posted
技术标签:
【中文标题】如何动态添加Section和TableView Cell【英文标题】:How to add Section and TableView Cell dynamically 【发布时间】:2012-04-02 03:04:34 【问题描述】:我有一个按钮,当按下该按钮时,将添加一个 tableview 部分,并且还将向该部分添加一个新行。如何以编程方式实现此功能?
我有一个单元格数组。
这是我的代码
- (IBAction)addCell:(id)sender
UITableViewCell *newCell = [[UITableViewCell alloc] init];
counter++;
[cells addObject:newCell];
[self.tableView reloadData];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return [cells count];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return 1;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//this is where i want to adjust the row per section
//this code hide the recent sections, only the current created section appears
return [cells objectAtIndex:indexPath.row];
【问题讨论】:
你的所作所为可不是对付UITableView
s的好办法!您在其他地方创建了UITableViewCell
s,而建议在cellForRowAtIndexPath
中完成。您只需更改 dataSource
然后重新加载表格即可完成您想要的操作。
【参考方案1】:
您好,请尝试阅读:
How to display the UITableView programmatically?
Adding cells programmatically to UITableView
希望这对你有帮助。
【讨论】:
谢谢,但我可以将单元格动态添加到表格视图中。我关心的是如何向新添加的部分添加一个部分和一个单元格。众所周知,我们必须配置 ,- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 方法来返回节数。当按下按钮然后重新加载表格时,我有一个计数器来执行此操作。问题是如何处理 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 控制每个部分出现的 if 语句的方法? 请不要在 cmets 中建议链接作为答案。【参考方案2】:首先,更新您的数据模型(NSArray 或可变)。二、当要刷新tableview时,添加代码[self.tableView reloadData];
哎呀,你的代码有些奇怪的uitaleviewDataSource,Delegate Method。
另外,你有一个错误。
为什么要实现 numberOfRowsInSection 返回 1?很奇怪。
我很欣赏下面的代码。
CASE 1. 没有DataModel。
- (IBAction)addCell:(id)sender
cellRowsCount++;
[self.tableView reloadData];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return cellRowsCount;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
return cell;
您的代码,dataModel(NSArray 或 mutable) 不一定需要,所以我只是添加了 rowCount 变量,并且您的 tableviewCell 的 rowsCount 已同步。
如果您想使用 DataModel,请在 CASE2 下方。请参考。
案例 2。有数据模型。
- (IBAction)addCell:(id)sender
textCount ++;
NSString *cellText = [NSString stringWithFormat:"blah %d", textCount];
[myArray addObject:cellText];
[self.tableView reloadData];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return [myArray count];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [[myArray objectAtIndex:section] count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
cell.textLabel.text = (NSString *)[myArray objectAtIndex:indexPath.row];
return cell;
【讨论】:
问题是如何处理 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法来控制每个部分出现的 if 语句? Multisection 是指相等的二维数组模型,如果你想扩展部分,你的数据模型必须二维数组实现。另外关于 tableView numberOfSectionInTableview 方法添加代码 return [myArray count];也实现了。 numberOfSection 实现 return [myArr count]; numberOfRowsInSection 必须实现 return [[myArr objectAtIndex:section] count]; 还是不明白。我用我的代码更新了我的问题。请看看这对你来说是否清楚。非常感谢。【参考方案3】:您只需将新部分和新项目添加到包含该部分和项目的数组中,如下所示:
- (void)viewDidLoad
[super viewDidLoad];
animals = @@"Section 1" : @[@"Item 1", @"Item 2", @"Item 3"],
@"Section 2" : @[@"Item 1", @"Item 2"];
之后,您只需在逻辑需要的任何地方重新加载 tableView:
[self.tableView reloadData];
【讨论】:
以上是关于如何动态添加Section和TableView Cell的主要内容,如果未能解决你的问题,请参考以下文章