Iphone UITableViewCell和UITableView的相互测试问题,有解决方案吗?

Iphone UITableViewCell和UITableView的相互测试问题,有解决方案吗?,iphone,uitextfield,uitableview,Iphone,Uitextfield,Uitableview,我有一个继承自UITableViewController的类,这也是根类。此tableView包含三个自定义的UITableViewCells(从NIB文件加载而非子类),每个UITableViewCell都有一个UITextField。现在,当我实现委托方法时 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementStr

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

- (BOOL)textField:(UITextField *)textField
        shouldChangeCharactersInRange:(NSRange)range
        replacementString:(NSString *)string
我没有收到任何事件。这个函数从未被激发,我也尝试过实现其他委托方法,但都没有激发。如何激发这些委托方法

我还想为这些
UITextField
s(属于
UITableViewCell
的一部分)重写
canperformation:sender:
函数

如何执行此操作?

文本字段:shouldChangeCharactersRange:replacementString:方法是
UITextFieldDelegate
协议的一部分,因此您必须为这些
UITextField
设置一个委托

例如,如果在表视图控件代码中创建
UITextField
s,并假设该方法在同一控件中实现,则可以执行以下操作:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(x,y,w,h)];
[textField setDelegate:self];
但是,您说您正在从XIB文件加载
UITableViewCell
s。您必须以某种方式从代码内部访问
UITextField
s,并对其调用
setDelegate:
方法。您可以使用
UIView
子视图
属性来完成此操作。例如:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil];
UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0];
虽然在代码中创建
UITextField
s要简单得多,也更优雅,但IMHO


至于覆盖
canperformation:sender:
方法,您必须为
UITextField
子类。

文本字段:shouldchangeCharactersRange:replacementString:方法是
UITextFieldDelegate
协议的一部分,因此您必须为这些
UITextField
设置一个委托

例如,如果在表视图控件代码中创建
UITextField
s,并假设该方法在同一控件中实现,则可以执行以下操作:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(x,y,w,h)];
[textField setDelegate:self];
但是,您说您正在从XIB文件加载
UITableViewCell
s。您必须以某种方式从代码内部访问
UITextField
s,并对其调用
setDelegate:
方法。您可以使用
UIView
子视图
属性来完成此操作。例如:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil];
UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0];
虽然在代码中创建
UITextField
s要简单得多,也更优雅,但IMHO


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

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

这个类是UITextFieldDelegate吗?您需要提供更多信息、来源等。。。。
你没有得到任何事件的事实让我觉得问题在于NIB中缺少了一些东西。由于这个确切的原因,我不使用IB或NIB,调试问题变得非常困难。也许post您的XML的

RootViewController是UITextFieldDelegate的代理,我无法在这里发布我的XML文件,因为它跨越了600个字符。如何上传xml文件?RootViewController是UITextFieldDelegate的代理,我无法在这里发布我的xml文件,因为它跨越了600个字符。如何上传xml文件?感谢Can Berk提供的提示,非常有用。如何找到要传入objectAtIndex的索引值?这里显示的是将值传递为0,它是否始终为0?因为我在tableviewcell、label、textfield和一个按钮上有3个控件。很抱歉,如果这是一个基本问题,但我对iphone编程还不熟悉。这取决于您添加子视图的顺序,但由于您要在XIB文件中添加子视图,我想您必须尝试0到2。正如我所说,在代码中而不是在Interface Builder中创建UITableViewCells是一种更好的做法。如果可以的话,试着这样做,这将是一个很好的锻炼。谢谢can Berk的提示,它真的很有帮助。如何找到要传入objectAtIndex的索引值?这里显示的是将值传递为0,它是否始终为0?因为我在tableviewcell、label、textfield和一个按钮上有3个控件。很抱歉,如果这是一个基本问题,但我对iphone编程还不熟悉。这取决于您添加子视图的顺序,但由于您要在XIB文件中添加子视图,我想您必须尝试0到2。正如我所说,在代码中而不是在Interface Builder中创建UITableViewCells是一种更好的做法。如果可以的话,试着这样做,这将是一个很好的锻炼。