我怎样才能closures键盘上的input按键
当我按下RETURN键时,我想closures我的键盘。
我已经试过把button放在背面。
但是,我怎样才能通过按RETURN键呢?
-(BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
不要忘记添加委托UITextFieldDelegate
我希望你已经完成了UIViewController <UITextFieldDelegate>
和yourTextField.delegate=self
;
然后在委托方法中
- (BOOL)textFieldShouldReturn:(UITextField *)textField; { [textField resignFirstResponder]; return YES; }
我假设你说的是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
协议缺less与textFieldShouldReturn:
方法等价的方法,大概是因为我们不应该期望Return键是用户希望在多行文本input对话框中停止编辑文本的信号(毕竟,用户可能想通过按回车插入换行符)。
但是,有几种方法可以解决UITextView
无法使用键盘作为第一响应者的问题。 通常的方法是当UITextView
显示popup式键盘时,在导航栏中放置完成button。 点击时,该button会要求文本视图作为第一响应者辞职,然后closures键盘。
然而,根据你的界面计划,你可能希望UITextView
在用户在UITextView
本身之外进行切换时重新UITextView
。 要做到这一点,你可以UIView
接受触摸,然后指示文本视图在用户点击视图本身之外时退出。
创build一个新的类,
#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,并将nib文件中视图的types更改为CustomView
而不是默认的UIView
类。 然后在Connections Inspector中,将textView
出口拖到UITextView
。 这样做后,一旦你重build你的应用程序,触及活跃的用户界面元素现在将closures键盘。 但是请注意,如果您正在进行子类化的UIView
是其他UI元素的“后面”,这些元素将在到达UIView层之前拦截触摸。 所以虽然这个解决scheme是优雅的,但它只能在某些情况下使用。 在许多情况下,您将不得不求助于在导航栏中添加“完成”button以closures键盘的蛮力方法。
确保您的视图控制器类是您的UITextField
的委托,然后使用该类中的委托方法:
#pragma mark - Delegate Methods - (BOOL)textFieldShouldReturn:(UITextField *)textField{ // Dismiss the keyboard when the Return key is pressed. [textField resignFirstResponder]; return YES; }