回答
你试过:
[viewReceivingKeys resignFirstResponder];
其中viewReceivingKeys
是接收文本输入的UIView?
使用导航控制器并在完成后弹出视图?
例如,我用这样的代码到约盒滑入:
[[self navigationController] presentModalViewController:modalViewController animated:YES];
,然后当在关于对话框单击该按钮时,我用它来摆脱它:
[self.navigationController dismissModalViewControllerAnimated:YES];
在我的情况下,关于框占据整个屏幕,但我不认为它必须为此工作。
编辑:我想我可能误解了你的问题。如果你自己伪造整个键盘视图,那么我的代码就会出现这种情况。我认为辞职的第一响应者是正确的方式来做到这一点,如果它是你的工具栏添加在顶部的普通键盘。
如果您在Interface Builder中构建自己的视图,请将您的视图控制器设置为文本字段的委托并在您的视图控制器中实现textFieldShouldReturn:从UITextFieldDelegate。
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
NSLog(@"%@ textFieldShouldReturn", [self class]);
[theTextField resignFirstResponder];
// do stuff with the text
NSLog(@"text = %@", [theTextField text]);
return YES;
}
UITextFieldDelegate textFieldShouldReturn: in the iphone cocoa docs
有几个你需要记住的东西。开发人员忘记设置的号码#1部分是textField的代表。
如果您使用Interface Builder,则必须记住您需要将textField的委托设置为文件所有者。
如果您未使用Interface Builder,请确保将文本字段的委托设置为self。我还包括returnType。例如,如果文本框被称为gameField:
gameField.delegate = self;
gameField.returnKeyType = UIReturnKeyDone;
您还必须实现UITextFieldDelegate您的视图控制器。
@interface YourViewController : UIViewController <UITextFieldDelegate>
最后,你需要使用textFieldShouldReturn方法,并呼吁[文本字段resignFirstResponder]所以你只需要有这个设置一次
-(BOOL) textFieldShouldReturn:(UITextField*) textField {
[textField resignFirstResponder];
return YES;
}
您所有的文本框将使用同样的方法。只要将代理设置为textField,将为接口实现UITextFieldDelegate,则添加textFieldShouldReturn方法并调用您设置的resignFirstResponder。
我想你的意思是gameField.returnKeyType = UIReturnKeyDone; – 2010-11-11 21:35:48
如果您正在讨论的是解除键盘从UITextField
而不是UITextView
。你的问题不明确?如果您然后确保你的类被标记为在接口文件UITextFieldDelegate
,
@interface MyController: UIViewController <UITextFieldDelegate> {
UITextField *activeTextField;
// ...remainder of code not show ...
}
,然后你应该,如果您使用的是实现两个委托方法如下,
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
activeTextField = textField;!
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
activeTextField = nil;
[textField resignFirstResponder];
return YES;
}
然而UITextView
那么事情就复杂一点了。 UITextViewDelegate
协议缺少相当于textFieldShouldReturn:
方法,大概是因为我们不应该期望Return键是一个信号,表示用户希望停止编辑多行文本输入对话框中的文本(毕竟,用户可能想要按Return键插入换行符)。
但是,有几种方法可以使UITextView
无法成为使用键盘的第一响应者。当UITextView
显示弹出式键盘时,通常的方法是在导航栏中放置一个完成按钮。点击时,此按钮会要求文本视图作为第一响应者辞职,然后关闭键盘。
但是,根据您计划出的界面的方式,您可能希望UITextView
在用户在UITextView
本身之外轻触时退出。为此,您可以继承UIView
以接受触摸,然后指示文本视图在用户在视图外部自行敲击时辞职。
创建一个新的类,
#import <UIKit/UIKit.h>
@interface CustomView : UIView {
IBOutlet UITextView *textView;
}
@end
然后,在执行,落实touchesEnded:withEvent:
方法和要求UITextView
辞去第一响应。
#import "CustomView.h"
@implementation CustomView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}
- (void) awakeFromNib {
self.multipleTouchEnabled = YES;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began count %d, %@", [touches count], touches);
[textView resignFirstResponder];
[self.nextResponder touchesEnded:touches withEvent:event];
}
@end
一旦您添加了类,您需要保存所有更改,然后进入Interface Builder并单击您的视图。打开Utility pabel中的Identity inspector并将笔尖文件中的视图类型更改为您的CustomView
而不是默认的UIView
类。然后在Connections Inspector中,将textView
插座拖动到UITextView
。这样做后,一旦你重建你的应用程序,触及活跃的用户界面元素现在将关闭键盘。但是,请注意,如果您正在进行子类化的UIView
位于其他UI元素“后面”,则这些元素将在到达UIView图层之前截取触摸。所以虽然这个解决方案很优雅,但它只能在某些情况下使用。在很多情况下,您必须使用强力方法在导航栏中添加一个完成按钮以关闭键盘。
- 1. ResignFirstResponder不关闭键盘(iPhone)
- 2. applicationWillResignActive关闭键盘iPhone
- 3. 关闭键盘
- 4. 关闭键盘
- 5. MFMessageComposeViewController关闭键盘
- 6. 关闭iPad键盘
- 7. 关闭UITextField键盘?
- 8. Android关闭键盘
- 9. UIKeyboardTypeNumberPad关闭键盘
- 10. MonoTouch.Dialog:关闭键盘
- 11. 关闭键盘数字键盘
- 12. iPhone - 用OK按钮关闭键盘,用UITextView接受返回键
- 13. 关闭带回车键的iPhone Mail View Controller键盘
- 14. 使用键盘关闭JFrame
- 15. 如何关闭键盘?
- 16. 如何关闭iOS键盘?
- 17. 关闭IPAD上的键盘
- 18. Android键盘不关闭
- 19. 关闭UIViewController中的键盘
- 20. 关闭键盘 - 的OBJç
- 21. 关闭键盘不工作
- 22. trigger.io - 关闭软键盘?
- 23. MonoTouch关闭键盘(各种)
- 24. 关闭UITextField中的键盘
- 25. 跳板关闭键盘
- 26. Objective-c EKEventEditViewController关闭键盘
- 27. 关闭textview的键盘
- 28. Android阻止键盘关闭
- 29. windows 7 phone - 关闭键盘
- 30. Framework7 - SearchBar关闭键盘
这是我想要的兴奋。谢谢。 – Lounges 2008-12-23 21:25:56