UITextField没有调用委托方法

时间:2012-10-05 15:46:23

标签: objective-c xcode delegates uitextfield storyboard

我有一个DetailViewController,哪个实现文件包含以下代码:

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController <UITextFieldDelegate>

{
    __weak IBOutlet UITextField *nameField;
    __weak IBOutlet UITextField *numberField;
}

@end

在我的故事板中,我已将ViewController设置为DetailViewController,并将我UITextField的代理人与我的DetailViewController联系起来。我的DetailViewController的实施文件包含此方法,以便在点击文本字段以外的其他位置时关闭键盘:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

虽然我没有调用此方法,但我已使用断点对其进行了测试。可能出现什么问题?

3 个答案:

答案 0 :(得分:1)

rdelmar是正确的,只有当用户点击键盘上的“返回”键时才会触发您的代码,而不是当他们点击键盘外部时。

要获得您正在寻找的行为,我会在文字字段后面的视图中添加点击手势识别器,然后将[nameField resignFirstResponder];[numberField resignFirstResponder];放入点击手势识别器的代码中。

答案 1 :(得分:0)

为什么使用_weak?删除它。

.m文件中(在viewDidLoad中):

[nameField setDelegate:self];

其他文本字段相同。

答案 2 :(得分:0)

  • 我创建了一个示例项目
  • 已添加到viewcontroller
  • 添加了一个文本字段并连接了其代理
  • 在viewcontroller中编写代码

     (BOOL)textFieldShouldReturn:(UITextField *)textField
     {
        [textField resignFirstResponder];
        return YES; 
     }
    

它工作正常。脆弱它也兼具实例变量和属性

因此,请检查您是否在任何地方重新分配它,并使用断点检查其内存是否相同