我有以下代码:
@interface MyCell : UITableViewCell<UITextFieldDelegate>
{
IBOutlet UITextField *txtFields;
}
- (IBAction)textFieldAction:(id)sender;
@property (nonatomic,retain) IBOutlet UITextField *txtFields;
@end
我还有以下委托(delegate)函数:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
return NO;
}
但是,我注意到它从未被调用过。我根据以下代码从界面构建器和代码中设置委托(delegate):[txtFields setDelegate:self];
但似乎都不起作用。我还缺少其他东西吗?
最佳答案
您显然将其与 UITableView
结合使用。首先,如果你想支持用户交互,txtFields 必须是单元格 contentView
的 subview ,而不是 backgroundView。
假设 txtFields 对象是 contentView
的 subview ,那么让我们看看连接。
tableView 有一个方法 cellForRowAtIndexPath:
,您可以在其中返回一个新的单元格或一个回收的单元格。在该单元格的最底部,添加:
NSLog(@"textFields=%@ delegate=%@", cell.txtFields, cell.txtFields.delegate);
assert(cell.txtFields.delegate == cell); // lets make sure this is proper
如果实际上两个参数都存在,您现在就知道 txtFields 对象位于正确的容器 (contentView
) 中,该属性正在工作,并且委托(delegate)已设置为单元格。
如果这一切正常并且您在点击时没有得到键盘,那么很可能是其他东西覆盖了 txtFields - 一些其他透明 View 和它的触摸。
在那种情况下,您应该使用 MyCell 类拼凑一个小演示应用程序,即使只有一个硬编码单元格也能演示问题,然后将其上传(压缩)到您的 DropBox 帐户,其他像我这样的人可以查看它并找到问题。
关于ios - UITextField 代表不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12394840/