我想在按RETURN键时关闭键盘。
我试过把按钮放在视野的背面。
但是如何通过按RETURN键来执行此操作?
答案 0 :(得分:7)
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
不要忘记添加委托UITextFieldDelegate
答案 1 :(得分:2)
我希望您已完成UIViewController <UITextFieldDelegate>
和yourTextField.delegate=self
;
然后在委托方法
中- (BOOL)textFieldShouldReturn:(UITextField *)textField;
{
[textField resignFirstResponder];
return YES;
}
答案 2 :(得分:2)
我假设您正在谈论的是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检查器,并将 nib 文件中的视图类型更改为CustomView
,而不是默认的UIView
类。然后在Connections Inspector中,将textView
插座拖到UITextView
。执行此操作后,一旦重建应用程序,触摸活动UI元素外部现在将关闭键盘。但请注意,如果您继承的UIView
是其他UI元素的“后面”,则这些元素将在到达UIView层之前拦截触摸。因此,虽然这种解决方案很优雅,但它只能在某些情况下使用。在许多情况下,您必须采用强制方法将完成按钮添加到导航栏以关闭键盘。
答案 3 :(得分:1)
确保您的视图控制器类是UITextField
的委托,然后使用该类中的委托方法:
#pragma mark - Delegate Methods
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
// Dismiss the keyboard when the Return key is pressed.
[textField resignFirstResponder];
return YES;
}