我有一个登录页面,用户名将密码放在密码上方,然后登录按钮位于底部。当我输入用户名时,键盘会覆盖通行证和登录名。当有人点击文本字段外部或者是否有办法生成关闭键盘按钮时,如何关闭键盘?我发现如何做到这一点的唯一方法是以编程方式向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];
}
对视图进行编程并添加字段。有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
您可以通过多种方式解决此问题。一种方法是通过调整框架顶部,在键盘变为活动状态时滑动包含字段和按钮的视图。看看UITextFieldDelegate。如果文本字段位于表视图中,则可以缩小表视图的高度。
如果要在用户点击文本字段之外时隐藏键盘,可以向视图添加UIGestureRecognizer。检测到点击时,您可以将活动文本字段告知resignFirstResponder。
答案 1 :(得分:1)
更好的方法是收听UIKeyboard
通知并适当调整视图大小,以便在键盘出现时显示整个表单。从那里,您可以连接键盘上的返回按钮,以根据哪个文本字段具有第一响应者状态采取适当的操作。例如,按下用户名字段中的返回将标签到密码字段,并从密码字段按下它将等同于点击登录按钮。无需手动管理键盘。
答案 2 :(得分:0)
另一种方法是为UITextField设置一个带有“完成”按钮的inputAccessoryView,该按钮在单击时会重新启动键盘。
答案 3 :(得分:0)
将所有内容放在滚动视图上,当键盘是第一个响应者时,然后将键盘的高度添加到滚动视图的高度。键盘消失时反向执行。