我有以下代码:
@interface MyCell : UITableViewCell<UITextFieldDelegate>
{
IBOutlet UITextField *txtFields;
}
- (IBAction)textFieldAction:(id)sender;
@property (nonatomic,retain) IBOutlet UITextField *txtFields;
@end
我还有以下委托功能:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return NO;
}
然而,我注意到它永远不会被召唤。我从接口构建器以及代码中设置委托:[txtFields setDelegate:self];
但似乎都不起作用。我还缺少其他的东西吗?
答案 0 :(得分:6)
您显然将此与UITableView
结合使用。首先,如果您想支持用户交互,则txtFields必须是单元格contentView
的子视图,而不是backgroundView。
假设txtFields对象是contentView
的子视图,那么让我们看一下连接。
tableView有一个方法cellForRowAtIndexPath:
,您可以在其中返回新单元格或循环单元格。在该单元格的最底部,添加:
NSLog(@"textFields=%@ delegate=%@", cell.txtFields, cell.txtFields.delegate);
assert(cell.txtFields.delegate == cell); // lets make sure this is proper
如果实际上两个参数都在那里,你现在知道txtFields对象在适当的容器(contentView
)中,属性正在工作,并且委托被设置为单元格。
如果这一切都是正确的,而你在点击时没有拿到键盘,那么很可能是其他东西覆盖了txtFields - 其他一些透明视图和它吃掉了触摸。
在这种情况下,您应该使用MyCell类将一个小的演示应用程序放在一起,甚至只有一个硬编码的单元格,它会演示问题,然后将其(压缩)上传到您的DropBox帐户,像我这样的其他人可以查看它找到了问题。
答案 1 :(得分:0)
尝试删除:
{ IBOutlet UITextField * txtFields; }
因为您已经有@property
。
另外,你有@synthesize txtFields;
吗?