【问题标题】:UITextField Delegate not workingUITextField 委托不起作用
【发布时间】:2013-05-24 20:21:55
【问题描述】:

我有以下代码:

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

【问题讨论】:

  • 你在其他地方使用 txtFields 吗?
  • 插座连接了吗?
  • @Ravi,它没有在其他任何地方使用
  • @Tom,是的,插座已连接。
  • 嗯,这听起来很奇怪。检查是否有机会将 userInteractionEnabled 设置为 NO?另外,键盘弹出了吗?

标签: ios uitextfield uitextfielddelegate


【解决方案1】:

您显然将它与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 帐户,像我这样的其他人可以查看找出问题所在。

【讨论】:

    【解决方案2】:

    尝试删除:

    { IBOutlet UITextField *txtFields; }

    因为你已经有一个@property

    另外,你@synthesize txtFields;了吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2012-01-07
      相关资源
      最近更新 更多