UITextField Delegate无法正常工作

时间:2012-09-12 19:18:42

标签: ios uitextfield uitextfielddelegate

我有以下代码:

@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];但似乎都不起作用。我还缺少其他的东西吗?

2 个答案:

答案 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;吗?