关闭 iPhone 模拟器上的键盘

Posted

技术标签:

【中文标题】关闭 iPhone 模拟器上的键盘【英文标题】:Close Keyboard on IPhone Simulator 【发布时间】:2011-12-27 19:34:56 【问题描述】:

我有一个登录页面,将用户名放在密码上方,然后将登录按钮放在底部。当我输入用户名时,键盘会覆盖通行证和登录名。当有人在文本字段之外单击时,我该如何关闭键盘,或者有没有办法生成关闭键盘按钮?我发现如何做到这一点的唯一方法是以编程方式将字段添加到 UI。有没有办法使用编辑器来完成这个?

这是我的头文件:

@interface Login : UIViewController
RootViewController *rootViewController;
IBOutlet UITextField *usernameField;
IBOutlet UITextField *passwordField;
IBOutlet UIButton *loginButton;

@property (nonatomic, retain) UITextField *usernameField;
@property (nonatomic, retain) UITextField *passwordField;
@property (nonatomic, retain) UIButton *loginButton;
@property (nonatomic, retain) RootViewController *rootViewController;
- (IBAction) login: (id) sender;

@end

我发现这样做的唯一方法是:

    - (BOOL)textFieldShouldReturn:(UITextField *)textField 

[textField resignFirstResponder]; 
return YES; 
 
- (void)loadView 
 
self.view = contentView; 
[contentView release]; 
// Create a field with a Done return key 
usernameField = [[[UITextField alloc] initWithFrame:CGRectMake(120.0f, 40.0f, 150.0f, 30.0f)] retain]; 
[usernameField setBorderStyle:UITextBorderStyleRoundedRect]; 
usernameField.placeholder = @"name"; 
usernameField.returnKeyType = UIReturnKeyDone; 
usernameField.clearButtonMode = UITextFieldViewModeWhileEditing; 
usernameField.delegate = self; 
[contentView addSubview:usernameField]; 
[usernameField release]; 
 

哪个对视图进行编程并添加字段。有没有办法解决这个问题?

【问题讨论】:

【参考方案1】:

您可以通过多种方式解决此问题。一种方法是通过调整框架顶部在键盘变为活动状态时向上滑动包含字段和按钮的视图。查看 UITextFieldDelegate。如果文本字段在表格视图中,那么您可以缩小表格视图的高度。

如果您想在用户在文本字段外点击时隐藏键盘,您可以将 UIGestureRecognizer 添加到视图中。当检测到点击时,您可以告诉活动文本字段 resignFirstResponder。

【讨论】:

视图上手势识别器的问题在于它也适用于子视图,这意味着点击一个字段将调用手势识别器并且键盘永远不会出现。虽然,可以进行命中测试以确定已点击的视图类型并进行相应处理。 查看一些旧代码,我使用了 UITapGestureRecognizer。我设置属性 cancelsTouchesInView = NO。我的点击处理程序基本上会调整视图的大小以填充键盘占用的空间。 哦,我明白了,我以为你在谈论使用UITapGestureRecognizer 来辞去第一响应者的职务。 我刚刚在主文件中添加了一个 resignFirstResponder 并将文本字段指向文件所有者。按回车键时键盘隐藏。到处都有这么多复杂的解释。 :)【参考方案2】:

更好的方法是侦听UIKeyboard 通知并适当调整视图大小,以便在键盘出现时可以看到整个表单。从那里您可以连接键盘上的返回按钮,以根据哪个文本字段具有第一响应者状态采取适当的操作。例如,从用户名字段按回车键将切换到密码字段,从密码字段按它相当于点击登录按钮。无需手动管理键盘。

【讨论】:

+1 以获得更好的解决方案,而不是要求用户关闭键盘以查看他们需要查看的内容。【参考方案3】:

另一种方法是为 UITextField 设置一个 inputAccessoryView 并带有一个“完成”按钮,当点击该按钮时它会退出键盘。

【讨论】:

【参考方案4】:

将所有内容放在滚动视图上,当键盘是第一响应者时,然后将键盘的高度添加到滚动视图的高度。当键盘消失时执行相反的操作。

【讨论】:

以上是关于关闭 iPhone 模拟器上的键盘的主要内容,如果未能解决你的问题,请参考以下文章

xcode模拟器不显示键盘解决方案

iPhone 6 模拟器,隐藏键盘问题

如何在 iphone 模拟器上使用键盘打字?

无法使用Mac键盘在iphone模拟器中键入文本字段?

iphone4s 模拟器上的 Swift UI 测试失败与其他模拟器配合得很好

iOS iPhone 11 Xcode 模拟器键盘(硬和软)返回不正确的字符串