2012-03-01 70 views
4

我有一个按钮和一个文本框。点击按钮时,我只想让键盘消失。为什么我的代码不起作用。textFieldShouldReturn不起作用(在XCode 4上使用情节提要)

更新:我看到了一些关于文件的所有者。我不明白如何在XCode4中执行此操作我使用故事板,但看不到任何文件所有者图标。

更新2:我发现了一个tut http://www.techotopia.com/index.php/Writing_iOS_4_Code_to_Hide_the_iPhone_Keyboard_%28Xcode_4%29,但它使用XCode 4上的XIB文件而非故事板。如何与故事板做到这一点?

myViewController.h

@interface myViewController : UIViewController <UITextFieldDelegate> 
{ 
    UITextField *myTextField; 
} 

@property (retain, nonatomic) IBOutlet UITextField *myTextField; 

myViewController.m

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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    myTextField.delegate = self; 
} 

- (IBAction)DoCalc:(id)sender { 
     // ... 
} 
+0

由于textField是在IB中创建的。它是否与myTextField引用连接。另外,myTtextField中还有一个额外的字符'T'。 – Ravin 2012-03-01 15:40:22

+0

谢谢我修复了T,但是隐藏键盘的问题是nit链接到它:) – user310291 2012-03-01 18:05:35

回答

3

textFieldShouldReturn:应该返回NO隐藏键盘。还有一件事 - 不要设置第一响应者self[textField resignFirstResponder]就够了,iOS本身应该是nextResponder

+0

谢谢我试过了,但它仍然不起作用另一个建议? :) – user310291 2012-03-01 15:17:13

+0

如果你已经实现了'textFieldShouldEndEditing:'方法,它应该返回YES。 – 2012-03-01 15:23:41

+0

不,我没有实现textFieldShouldEndEditing – user310291 2012-03-01 16:24:26

1

可以隐藏在这种方法中,keybord ...

- (void)textFieldDidEndEditing:(UITextField *)textField { 

    [textField resignFirstResponder]; 
} 
+0

谢谢我也试过,但它仍然不工作或者另一个建议? :) – user310291 2012-03-01 15:17:35

+1

你设置了textfield委托吗? – Aravindhan 2012-03-01 15:44:08

+0

是因为在我的代码中有myTextField.delegate = self; – user310291 2012-03-01 16:22:54

1

删除[self becomeFirstResponder];应该这样做。

resignFirstResponder是关闭键盘。而becomeFirstResponder则是打开键盘。所以在你的代码中,你正在关闭,然后再次打开键盘。最后一个动作是打开键盘,因此它不会关闭。

你可以看看UIResponder Class作为UITextField

+0

真的我删除它(我跟着一个说,这样做的tut)。它仍然没有成功。 – user310291 2012-03-01 16:25:08

+0

更新:我看到了一些关于文件所有者的信息。我不明白如何在XCode4中执行此操作我使用故事板,但看不到任何文件所有者图标。 – user310291 2012-03-01 16:28:34

+0

我认为'textFieldShouldReturn'甚至没有被调用。你应该检查你的故事板中的'UITextField'链接。 – HelmiB 2012-03-01 16:30:51

5

超检查,看看是否你已经写入myViewController.m的textFieldShouldReturn功能甚至被调用。在里面设置一个断点,然后运行模拟器。按下键盘上的返回键。如果程序没有中断,那么你写的函数没有被调用。

如果是这样,这是因为您尚未将UIResponder职责委派给您的视图控制器。确保你正在为你正在使用的UITextField的myViewController类委派响应者职责。

在故事板中,通过控制 - 从UITextField小部件拖动到场景下方的黄色圆球,然后从出现的上下文菜单中选择“委托”。