单击 uibutton 动态重新创建 uitableview 部分

Recreate a uitableview section dynamically on a uibutton`s click

我需要在单击 UIButton 时重新创建 UITableView 部分。这是一个例子。

并且在按钮点击中它应该像这样创建。

但是我无法实现这个。

请帮忙。 我只是用 textLabel 创建一个简单的 UITableView。

cellForRowAtIndexPath 的代码是

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
     {
     static NSString *simpleTableIdentifier = @"SimpleTableItem";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
return cell;
 }

为 .h 中的 tableview 创建一个整数变量 index 和 属性

@property UITableView *tableView;

然后在-(void)viewDidLoad设置index=0;

现在,编写一个在您点击添加按钮时调用的方法

-(void)newTableView
{
tableView = [UITableView alloc] initWithFrame:CGRectMake(x,y+height*index,width,height)]; 
//other code related to table
tableView.tag = ++index;
[self.view addSubview:tableView];
}

Use tag in delegate methods

编辑: 正如您要求在 Table 视图中添加新部分而不是新的 table 视图 您必须先创建 table 分组样式视图

tableView = [UITableView alloc] initWithFrame:(CGRect)frame style:UITableViewStyleGrouped];

现在,当您点击那个添加按钮时调用一个方法

-(void)newSection
{
  count++;
  [tableView reloadData];
}

然后,您必须为分组 table 视图实现此委托方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return count;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return @"title";
}

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
   //same as your previous code
    }


- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //same as your previous code
}
//
//  ViewController.m
//  DynamicNewSections
//
//  Created by J Pulikkottil on 14/07/15.
//  Copyright (c) 2015 J Pulikkottil. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic) NSMutableArray *arrayData;
@property (strong, nonatomic) IBOutlet UITableView *tableViewTest;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

self.arrayData = [NSMutableArray array];


//section1
[self addSectionArray];
}
- (IBAction)addSection:(UIButton *)sender {

[self addSectionArray];
[self.tableViewTest reloadData];
}

- (void) addSectionArray{

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Height",@"label", @"", @"value", nil];
NSArray *arraysection = [NSArray arrayWithObjects:dict, nil];

[self.arrayData addObject:arraysection];

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{


UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableViewTest.frame.size.width, 45)];
view.backgroundColor = [UIColor yellowColor];
return view;
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

// Return the number of sections.
return [self.arrayData count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

// Return the number of rows in the section.
return [[self.arrayData objectAtIndex:section] count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellDetails" forIndexPath:indexPath];

NSArray *arraysection = [self.arrayData objectAtIndex:indexPath.section];
NSDictionary *dict = [arraysection objectAtIndex:indexPath.row];

cell.textLabel.text = [dict valueForKey:@"label"];
cell.detailTextLabel.text = [dict valueForKey:@"value"];
return cell;
}


@end

试试这个:

  • 只要有一个属性(例如numberOfSections
  • viewDidLoad
  • 中设置为1
  • numberOfSectionsInTableView:return self.numberOfSections;
  • 在您 UIButton 的 IBAction 中添加此代码:


self.numberOfSections++;
[self.tableView beginUpdates];
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:self.numberOfSections-1]
              withRowAnimation:UITableViewRowAnimationBottom];
[self.tableView endUpdates];