0

我有以下代码:

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

4

2 回答 2

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

如果事实上这两个参数都存在,那么您现在知道 txtFields 对象位于正确的容器 ( contentView) 中,该属性正在工作,并且委托已设置为单元格。

如果一切正常,并且您在点击时没有得到键盘,那么很可能是其他东西覆盖了 txtFields - 其他一些透明视图和它吃掉了触摸。

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

于 2012-09-12T22:41:33.543 回答
0

尝试删除:

{ IBOutlet UITextField *txtFields; }

因为你已经@property有了。

还有,你有@synthesize txtFields;吗?

于 2012-09-13T14:04:12.823 回答