使用UITableViewCell和UITableView解决问题,任何解决方案?

时间:2009-07-18 01:42:30

标签: iphone uitextfield uitableview

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

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

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

我还想覆盖这些canPerformAction:sender:的{​​{1}}函数(UITextField的一部分);
怎么做?

2 个答案:

答案 0 :(得分:1)

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

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

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

但是,您说您正在从XIB文件加载UITableViewCell。您必须以某种方式从代码中访问UITextField并在其上调用setDelegate:方法。您可以使用UIView的{​​{1}}属性来执行此操作。例如:

subviews

虽然在代码中创建UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil]; UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0]; 更容易也更优雅,但恕我直言。

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

答案 1 :(得分:0)

这个类是UITextFieldDelegate吗?您需要提供更多信息,来源等.... 事实上,你没有得到任何事件,这使得我的问题是NIB中缺少的东西。由于这个原因,我没有使用IB或NIB的任何东西,调试问题变得非常困难。也许发布您的XML