-2

我将如何创建具有以下功能的 UITableView:

我希望我的 UITableView 单元格中有 UITextfields。当用户开始输入 UITextField 时,tableview 会自动在其下方生成新的相同单元格。这本质上是针对具有“无限”个字段的表单。

写这篇文章的任何指示/提示都会很棒!

在 Storyboard 问题 #1 中创建自定义单元格

在 Storyboard 中创建自定义单元格时,我可以简单地在我的视图控制器的表格视图中创建一个“自定义单元格”吗?如果是这样,我是否需要更改单元格继承的类?

在此处输入图像描述

在 Storyboard 问题 #2 中创建自定义单元格

您能简要解释一下 Cell Identifier 的用途吗?

在此处输入图像描述

附加代码:

创建自定义 UITableViewCell:

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

    static NSString *CellIdentifier = @"AddListInformationCellid";
    AddListInformationCell *cell = (AddListInformationCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"AddListInformationCell" owner:self options:nil];
        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (AddListInformationCell *)currentObject;
                break;
            }
        }
    }

    return cell;
}

非常感谢。

4

2 回答 2

1

我会使用包含文本字段的自定义单元格来执行此操作。在下面的示例中,我有一个包含文本字段和标签的单元格(在情节提要中创建)。当用户开始输入时,我将一个条目(只是字符串“New”)添加到我的数组中,并在用户输入的单元格下方插入一个新单元格。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = [@[@"One",@"Two",@"Three",@"Four"] mutableCopy];
    [self.tableView reloadData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count;
}

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

    RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.label.text = self.theData[indexPath.row];
    return cell;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    self.beganEditing = YES;
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (self.beganEditing) {
        NSInteger row = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview].row;
        [self.theData insertObject:@"New" atIndex:row + 1];
        [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row + 1 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
        self.beganEditing = NO;
    }
    return YES;
}
于 2013-07-15T01:13:03.457 回答
-2

您将需要使用contentView您的单元格的属性。确保您的视图控制器符合UITableViewDelegateUITableViewDataSourceUITextViewDelegate协议。在你的cellForRowAtIndexPath方法中,你应该有这样的东西:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(30, 7, 150, 30)];
    [textField setDelegate:self];
    [textField setBorderStyle:UITextBorderStyleRoundedRect];
    [cell.contentView addSubview: textField];
    [cell.textLabel setText:@""];
    return cell;
}

然后,在您的textFieldShouldBeginEditing方法中,将您想要的单元格计数加一,然后在numberOfRowsInSection:您的数据源的方法中使用该计数。

于 2013-07-14T23:08:03.240 回答