UITableViewCell 帮助中的 UITextField

发布于 2024-10-09 12:27:37 字数 258 浏览 3 评论 0原文

我在互联网上寻找一个好的教程或发布关于在每个单元格中填充 UITextField 的 UITableView 用于数据输入的文章。

我想在滚动时跟踪每个 UITextField 以及其中写入的文本。 tableView 将被分段。我一直在使用自定义 UITableViewCell 但我对任何方法都持开放态度。

另外,是否可以使用 textFields 作为 ivars?

如果你们中的任何人能指出我正确的方向,我将不胜感激。

先感谢您!

I have scoured the internet looking for a good tutorial or posting about having a UITableView populated with a UITextField in each cell for data entry.

I want to keep track of each UITextField and the text written within it while scrolling. The tableView will be sectioned. I have been using a custom UITableViewCell but I'm open to any method.

Also, is it possible to use the textFields as ivars?

If any of you could point me in the right direction, it would be greatly appreciated.

Thank you in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我家小可爱 2024-10-16 12:27:37

为了解决您的问题,您必须维护一个数组,其中包含一些对象(添加到所有单元格的文本字段的数量)。

创建该数组时,您需要向该数组添加空 NSString 对象。每次加载单元格时,您都必须将受尊重的对象替换为受尊重的文本字段。

检查以下代码。

- (void)viewDidLoad{
    textFieldValuesArray = [[NSMutableArray alloc]init];
    for(int i=0; i<numberofRows*numberofSections; i++){
        [textFieldValuesArray addObject:@""];
    }

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return numberofSections;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return numberofRows;
}

- (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:identifier];

     CustomTextField *tf = [[CustomTextField alloc] initWithFrame:CGRectMake(5,5,290,34)];
     tf.tag = 1;
     [cell.contentView addSubView:tf];
     [tf release];
    }
    CustomTextField *tf = (CustomTextField*)[cell viewWithTag:1];
    tf.index = numberofSections*indexPath.section+indexPath.row;
    tf.text = [textFieldValuesArray objectAtIndex:tf.index];

    return cell;
    }

- (void)textFieldDidEndEditing:(UITextField *)textField{

    int index = textField.index;
    [textFieldValuesArray replaceObjectAtIndex:index withObject:textField.text];
}

To solve your problem you have to maintain an array, with some number (number of textFields you added to all cells) of objects.

While creating that array you need add empty NSString objects to that array. And each time while loading the cell you have to replace the respected object to respected textField.

Check the following code.

- (void)viewDidLoad{
    textFieldValuesArray = [[NSMutableArray alloc]init];
    for(int i=0; i<numberofRows*numberofSections; i++){
        [textFieldValuesArray addObject:@""];
    }

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return numberofSections;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return numberofRows;
}

- (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:identifier];

     CustomTextField *tf = [[CustomTextField alloc] initWithFrame:CGRectMake(5,5,290,34)];
     tf.tag = 1;
     [cell.contentView addSubView:tf];
     [tf release];
    }
    CustomTextField *tf = (CustomTextField*)[cell viewWithTag:1];
    tf.index = numberofSections*indexPath.section+indexPath.row;
    tf.text = [textFieldValuesArray objectAtIndex:tf.index];

    return cell;
    }

- (void)textFieldDidEndEditing:(UITextField *)textField{

    int index = textField.index;
    [textFieldValuesArray replaceObjectAtIndex:index withObject:textField.text];
}
不奢求什么 2024-10-16 12:27:37

首先,您必须了解 UITableViewCell 和 UITextField 只是视图,它们不应该保存数据,它们只是应该显示数据并允许用户与它们交互:数据应该保留存储在表的控制器中看法。

您必须记住,UITableView 允许您出于性能目的重用 UITableViewCell 实例:屏幕上显示的内容实际上是 UITableView 保留在那里的唯一子视图。这意味着您将重用其中已有文本字段的一个单元格,并直接在该字段上设置文本。当用户点击该字段时,它将对其进行编辑,并且当用户完成时,您必须从中获取值。

最快的方法是使用 Satya 提出的方法,即构建普通的 UITableViewCell 并插入到 UITextField 中(不需要 CustomTextField 类...)。该标签将允许您轻松返回到文本字段...但是您必须设置文本字段,以便在表视图调整大小或同一单元格中的标签发生更改时它能够正常运行。

最简洁的方法是子类化 UITableViewCell 并设置标签和文本字段的布局,并且您可以提供文本字段作为自定义子类的属性。

First of all, you must understand that UITableViewCell and UITextField are just views, they are not supposed to hold data, they are just supposed to display them and allow the user to interact with them: The data should remain stored in the controller of the table view.

You have to remember that UITableView allows you to reuse UITableViewCell instances for performance purpose: what's displayed on the screen are actually the only subviews UITableView keep there. It means that you'll reuse one cell that already has a text field in it and set the text on that field directly. When the user will tap on the field it will edit it and you'll have to get the value back from it when the user will have finished.

The fastest way, would be to use what Satya proposes, that is building normal UITableViewCell and insert into a UITextField (there's no need for a CustomTextField class...). The tag will allow you to get back to the text field easily... But you'll have to setup your text field so it behaves properly when the table view resizes or if a label in the same cell changes.

The cleanest way to do that is to subclass UITableViewCell and setup the layout of your label and text field, and you can provide the text field as a property of the custom subclass.

猫性小仙女 2024-10-16 12:27:37

我在表格视图中使用文本字段进行数据输入。
我在一个名为 Utility 的单独类中自定义了 UITextField 类:

在 Utility.h 中

 @interface CustomUITextField:UITextField{
        NSInteger rowNumber;
    }

在 Utility.m 中

@implementation CustomUITextField

@synthesize rowNumber;
@end

我的 tableView cellForRowAtIndexPath 方法是

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

    static NSString *Identifier = @"Cell";
    UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:Identifier];
    if(cell == nil)
        cell = [self reuseTableViewCellWithIdentifier:Identifier withIndexPath:indexPath];

    CustomUITextField *itemNameTextField = (CustomUITextField *)[cell.contentView viewWithTag:TEXTFIELD_TAG];//this is the tag I have set in reuseTableViewCellWithIdentifier method for textfield
    itemNameTextField.rowNumber = indexPath.row;
    itemNameTextField.text = @"";//you can set it for the value you want
    if(itemListTable.editing)
        itemNameTextField.borderStyle = UITextBorderStyleRoundedRect;
    else
        itemNameTextField.borderStyle = UITextBorderStyleNone;



    return cell;

}

您可以为 CustomUITextField & 自定义 UITextField 的委托方法。可以通过访问 CustomTextField 的行号来保存在特定行的文本字段中输入的文本。

就用这个试试吧。

I have used Textfields in tableview for data entry.
I have customised the UITextField class in a separate class called Utility :

In Utility.h

 @interface CustomUITextField:UITextField{
        NSInteger rowNumber;
    }

In Utility.m

@implementation CustomUITextField

@synthesize rowNumber;
@end

My tableView cellForRowAtIndexPath method is

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

    static NSString *Identifier = @"Cell";
    UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:Identifier];
    if(cell == nil)
        cell = [self reuseTableViewCellWithIdentifier:Identifier withIndexPath:indexPath];

    CustomUITextField *itemNameTextField = (CustomUITextField *)[cell.contentView viewWithTag:TEXTFIELD_TAG];//this is the tag I have set in reuseTableViewCellWithIdentifier method for textfield
    itemNameTextField.rowNumber = indexPath.row;
    itemNameTextField.text = @"";//you can set it for the value you want
    if(itemListTable.editing)
        itemNameTextField.borderStyle = UITextBorderStyleRoundedRect;
    else
        itemNameTextField.borderStyle = UITextBorderStyleNone;



    return cell;

}

You can customise the delegate methods of UITextField for CustomUITextField & can save the text entered in a particular row's textfield by accessing the CustomTextField's row number.

Just try with this.

自由范儿 2024-10-16 12:27:37

我遇到了同样的问题,这是我发现的一些处理这个问题的代码。它将输入的数据放入数组中。查看调试器控制台以查看键入文本的结果,这里是链接 TextFieldCell。 。快乐编码

I had the same problem here is some code i found that treats this problem . it puts the data enterd in a Array Look at the Debugger console to see the results of the text being typed here's the link TextFieldCell. . Happy Codeing

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文