2012-10-05 36 views
0

我有一个DetailViewController,其实现文件包含以下代码:的UITextField不调用委托方法

#import <UIKit/UIKit.h> 

@interface DetailViewController : UIViewController <UITextFieldDelegate> 

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

@end 

在我的故事板,我已经设置了ViewController年代到DetailViewController,并连接我的两个UITextField S的的代表到我的DetailViewController。我DetailViewController的实现文件包含此方法叩击声,比文本字段之外的其他地方时,取消键盘:

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

这种方法虽然不叫,我一直在使用断点测试这一点。可能会出现什么问题?

+2

你有没有把日志语句放在那里看看它是否被调用?当用户点击返回按钮时调用此方法,而不是在文本字段以外的地方点击。 – rdelmar

+0

在您的VDL中放入一个'NSLog(@“DELEGATE =>%@”,nameField.delegate);'以查看委托是否真的被设置? –

回答

1

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

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

+0

谢谢,我不知道!我已经添加了Tap Gesture Recognizer,现在它工作正常。 :) –

+0

很高兴听到我能帮忙。 – GeneralMike

0

为什么使用_weak?去掉它。

在你.m文件做(在viewDidLoad):

[nameField setDelegate:self]; 

同为其他文本框(或多个)。

+1

弱IBOutlets罚款,并设置在IB代表应该也正常工作。事实上,这些网点与手头的问题无关 - 即使没有名称,代表也应该可以工作。 – rdelmar

+1

这样做以编程方式节省了大量的工作和错误。你不知道什么时候建立与xib的连接建设..如果你做所有的编程,你可以更容易地发现错误和东西 – xCoder

0
  • 我创建了一个样本项目
  • 添加到ViewController
  • 添加一个文本框,并连接其委托
  • 把代码写在视图 - 控制

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

它工作得很好。坚持弱它也作为实例变量和属性

因此,检查如果你在任何地方重新分配它,并检查它的内存是相同的还有用的断点