在iPhone模拟器上关闭键盘

时间:2011-12-27 19:34:57

标签: objective-c cocoa-touch iphone-sdk-3.0

我有一个登录页面,用户名将密码放在密码上方,然后登录按钮位于底部。当我输入用户名时,键盘会覆盖通行证和登录名。当有人点击文本字段外部或者是否有办法生成关闭键盘按钮时,如何关闭键盘?我发现如何做到这一点的唯一方法是以编程方式向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]; 
} 

对视图进行编程并添加字段。有什么方法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

另一种方法是为UITextField设置一个带有“完成”按钮的inputAccessoryView,该按钮在单击时会重新启动键盘。

答案 3 :(得分:0)

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