1

我有一个继承自的类UITableViewController,这也是根类。此 tableView 包含三个自定义UITableViewCells(从 NIB 文件加载而不是子类化),每个UITableViewCell都有一个UITextField. 现在当我实现委托方法时

- (BOOL)textField:(UITextField *)textField
        shouldChangeCharactersInRange:(NSRange)range
        replacementString:(NSString *)string

我没有收到任何事件。这个函数永远不会被触发,我也尝试实现其他委托方法,但它们都没有触发。如何触发这些委托方法?

我还想覆盖canPerformAction:sender:这些UITextFields 的函数(它们是 s 的一部分UITableViewCell);
这该怎么做?

4

2 回答 2

1

textField:shouldChangeCharactersInRange:replacementString:方法是UITextFieldDelegate协议的一部分,因此您必须为这些UITextFields 设置委托。

例如,如果您UITextField在表视图控制器代码中创建 s,并假设该方法在同一个控制器中实现,您可以这样做:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(x,y,w,h)];
[textField setDelegate:self];

但是,您说您正在UITableViewCell从 XIB 文件加载 s 。您必须以某种方式UITextField从代码内部访问 s 并调用setDelegate:它们的方法。您可以使用UIView'subviews属性来执行此操作。例如:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil];
UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0];

虽然UITextField在代码中创建 s 更容易,更优雅,恕我直言。

至于覆盖该canPerformAction:sender:方法,您必须为此进行子类化UITextField

于 2009-07-18T02:09:09.153 回答
0

Is this class a UITextFieldDelegate ? You need to provide more information, source etc.... The fact that you are not getting any event's makes me thing the problem is something missing in the NIB's. I don't use IB or NIB's for anything for this exact reason, debugging problems becomes really hard. Perhaps post your XML's

于 2009-07-18T02:10:19.467 回答