用户在表格视图控制器中将行/部分添加到静态单元格

Posted

技术标签:

【中文标题】用户在表格视图控制器中将行/部分添加到静态单元格【英文标题】:User adding rows/sections to static cells in Table View Controller 【发布时间】:2014-03-20 17:49:46 【问题描述】:

我想创建一个类似于 iPhone 联系人应用程序的“新联系人”屏幕的屏幕。 “添加电话”、“添加电子邮件”等旁边有绿色的小“+”号。当用户单击这些时,会创建新行(或者在“添加地址”的情况下,我想是新部分)。

如何在我的表视图控制器中创建类似的行为?

谢谢,丹尼尔

【问题讨论】:

【参考方案1】:

这是一个如何向 TableView 添加行的示例:

// holding your data
NSMutableArray* data;

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return [data count];


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

    return [[data objectAtIndex:section] count];


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    //if you want to add a section with one row:
    NSMutableArray *row = [[NSMutableArray alloc] init];
    [row addObject:@"Some Text"];
    [data addObject:row];
    [tableView reloadData];

    //if you want to add a row in the selected section:
    row = [data objectAtIndex:indexPath.section];
    [row addObject:@"Some Text"];
    [tableView reloadData];


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

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [[data objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

    return cell;

您的 Tableview 中应该有一个新行。下一步是用我们自己的数据替换“Some Text”。

【讨论】:

【参考方案2】:

这是我会采取的一般方法。

创建一个自定义的 tableview 单元格并为其创建一个委托

-(void)actionButtonTappedInTableViewCell:(UITableViewCell*)cell;

让您的视图控制器成为表格视图单元格的委托,当触发该操作时,请执行以下操作:

-(void)actionButtonTappedInTableViewCell:(UITableViewCell*)cell

    NSIndexPath *oldIndexPath = [self.tableView indexPathForCell:cell];
    NSIndexPath *pathToInsert = [NSIndexPath indexPathForRow:(oldIndexPath.row + 1) inSection:oldIndexPath.section];

    [self.tableView beginUpdates];

    //now insert with whatever animation you'd like
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:pathToInsert] withRowAnimation:UITableViewRowAnimationAutomatic];


    [self.tableView endUpdates];

将“特殊”行的索引路径添加到数组中,并在 cellForRow 方法中检查这是否是特殊行并进行设置。

【讨论】:

以上是关于用户在表格视图控制器中将行/部分添加到静态单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode Interface Builder 中将导航项添加到 Table View Controller(带有静态单元格)?

如何在swift 4中将按钮放在表格视图控制器的前面? [复制]

如何在swift 4中将表格视图控制器前面的按钮带到? [重复]

静态部分/单元格的 UITableView 背景图像

无法将内容添加到 IB 视图控制器中的自定义表格视图单元格

在 Swift 中将自定义 UITableViewCell 共享到多个 UITableViewController