在自定义UITableViewCell中管理UITextField的代理

Aha*_*hab 10 iphone objective-c uitableview ipad ios

所以我已经看了很多,这里的任何内容似乎都没有解释这样做的正确方法.我在自定义UITableViewCell中有7个UITextField.

我的问题是:管理这些UITextFields委托的正确方法是什么?

由于自定义单元格在技术上是项目"模型"部分的一部分,我宁愿控制UITableView的控制器也控制表格单元格中的文本字段,但我无法弄清楚如何设置委托的委托文本字段(在UITableViewCell的子类中创建)到此视图控制器.

让UITableViewCell的子类符合UITextField委托并管理其中的所有内容是不是不好的做法?如果是这样,我该怎么办呢?

谢谢,任何帮助将不胜感激.

Eya*_*yal 16

将单元格的文本字段的委托设置为视图控制器时,您应该没有问题.

这是你需要做的:

1)视图控制器需要实现UITextFieldDelegate协议

2)为自定义单元格中的文本字段声明属性

@property (nonatomic, retain) IBOutlet UITextField *textField;
Run Code Online (Sandbox Code Playgroud)

3)然后将视图控制器设置为方法中文本字段的委托 cellForRowAtIndexPath

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

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) 
    {  
        // use this if you created your cell with IB
        cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil] objectAtIndex:0];   

        // otherwise use this  
        cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 


        // now set the view controller as the text field delegate  
        cell.textField.delegate = self;
    }

    // configure cell...

    return cell;
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*mie 6

在我看来,单元格应该管理键盘,因为它是持有UITextField的键盘.您可以将单元格设置为UITextField委托.在我自己的应用程序中,我已经完成了这个,然后让我的单元格拥有它自己的委托.UITextField的任何方法或控制器应该处理的任何新方法都可以通过单元委托传递给控制器​​.

通过这种方式,单元格仍然可以是通用的,而无需知道应用程序实际执行的操作.

  • 我同意。为此,只需在 UITableViewCell 实现的初始化中设置委托。例如,在awakeFromNib 调用中,只需添加self.YourTextField.delegate = self。 (2认同)

Dav*_*d H 0

我的建议是使用对表中的节、行和 7 个文本视图之一进行编码的值来“标记”(即设置标记)每个文本字段,然后将 UIViewController 设为委托。

因此,您需要限制这些行的大小 - 假设您的行数永远不会超过 100 行。所以你将其编码为:

.tag = 1000*节 + 100*行 +

当您收到消息时,您可以使用方法/函数获取标签并将其解码为节、行、标签,然后执行您需要执行的操作。