我有一个继承自UITableViewController
的类,这也是根类。此tableView包含三个自定义UITableViewCell
(从NIB文件加载而不是子类),每个UITableViewCell
只有一个UITextField
。现在我实现委托方法
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
我没有收到任何事件。这个函数永远不会被触发,我尝试实现其他委托方法,但没有一个触发。如何解雇这些委托方法?
我还想覆盖这些canPerformAction:sender:
的{{1}}函数(UITextField
的一部分);
怎么做?
答案 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