如何动态添加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];

【问题讨论】:

你的所作所为可不是对付UITableViews的好办法!您在其他地方创建了UITableViewCells,而建议在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的主要内容,如果未能解决你的问题,请参考以下文章

如何动态调整tableheaderview的高度

在 UITableView 中为 Section Header 添加填充

根据objective c中得到的json隐藏行和节

tableView的section和row

如何使用 Swift 在静态表视图底部添加动态表视图?

由于TableView的Section的头部和尾部高度设置的不规范引起的部分Section中的图片无法正常显示