UITextField Delegate无法正常工作

KVI*_*ISH 0 uitextfield ios uitextfielddelegate

我有以下代码:

@interface MyCell : UITableViewCell<UITextFieldDelegate>
{
    IBOutlet UITextField *txtFields;
}

- (IBAction)textFieldAction:(id)sender;
@property (nonatomic,retain) IBOutlet UITextField *txtFields;

@end
Run Code Online (Sandbox Code Playgroud)

我还有以下委托功能:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

但是,我注意到它永远不会被召唤.我从接口构建器以及代码中设置委托:[txtFields setDelegate:self];但似乎都不起作用.我还缺少其他的东西吗?

Dav*_*d H 6

你显然将它与a结合使用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
Run Code Online (Sandbox Code Playgroud)

如果实际上两个参数都在那里,你现在知道txtFields对象在适当的容器(contentView)中,属性正在工作,并且委托被设置为单元格.

如果这一切都是正确的,而你在点击时没有拿到键盘,那么很可能是其他东西覆盖了txtFields - 其他一些透明视图并且它正在吃掉触摸.

在这种情况下,您应该使用MyCell类将一个小的演示应用程序放在一起,甚至只有一个硬编码的单元格来演示问题,然后将其(压缩)上传到您的DropBox帐户,像我这样的其他人可以查看它并查找问题.