键盘掩盖了input字段
当我想把文本放入我的UITextField时,键盘显示在它的顶部,并且覆盖这个字段。 如何防止这一点? 我刚刚阅读: 这个解决scheme,但我不知道在哪里调整? 这是一个好方法?
我的代码是:
UITextField * passwordTextField = [[[UITextField alloc] init] autorelease]; passwordTextField.keyboardType = UIKeyboardTypeDefault; passwordTextField.delegate = self; passwordTextField.placeholder = NSLocalizedString(@"somestr", @""); passwordTextField.secureTextEntry = YES; [_controls setObject:passwordTextField forKey:keyPassword];
然后我用Three20展示它:
...@"", [NSArray arrayWithObjects: [TTTableControlItem itemWithCaption:nil control:passwordTextField], nil],...
您只需要实现UITextField textFieldDidBeginEditing和textFieldDidEndEditing的委托。当调用textFieldDidBeginEditing时,通过某个值移动parentview的框架,并在调用委托方法textFieldDidEndEditing时将其恢复为相同的值。
另一种方法是为UIKeyboardDidShowNotification添加一个观察器,并在UIKeyboardDidHideNotification触发时向下移动框架。
样本: –
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:)name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardDidHideNotification object:nil];
并更改select器中的帧: –
- (void)keyboardDidShow:(NSNotification *)aNotification { if ( keyBDidShow) return; NSTimeInterval animationDuration = 0.300000011920929; CGRect frame = self.view.frame; frame.origin.y -= 60; [UIView beginAnimations:@"Rollback" context:nil]; [UIView setAnimationDuration:animationDuration]; self.view.frame = frame; [UIView commitAnimations]; viewUp= YES; } keyBDidShow= YES; } - (void)keyboardWasHidden:(NSNotification *)aNotification { if ( viewUp) { NSTimeInterval animationDuration = 0.300000011920929; CGRect frame = self.view.frame; frame.origin.y += 60; [UIView beginAnimations:@"Rollback" context:nil]; [UIView setAnimationDuration:animationDuration]; self.view.frame = frame; [UIView commitAnimations]; viewUp = NO; } keyBDidShow= NO; }
同样可以为文本字段代表完成。
resize应该应用到根视图:想法是设置视图框架匹配可见区域通过键盘缩小,而第一响应者仍然可见。 检查TTBaseViewController
属性的autoresizesForKeyboard
和相应的方法
/////////////////////////////////////////////////////////////////////////////////////////////////// - (void)keyboardWillAppear:(BOOL)animated withBounds:(CGRect)bounds { // Empty default implementation. } /////////////////////////////////////////////////////////////////////////////////////////////////// - (void)keyboardWillDisappear:(BOOL)animated withBounds:(CGRect)bounds { // Empty default implementation. } /////////////////////////////////////////////////////////////////////////////////////////////////// - (void)keyboardDidAppear:(BOOL)animated withBounds:(CGRect)bounds { // Empty default implementation. } /////////////////////////////////////////////////////////////////////////////////////////////////// - (void)keyboardDidDisappear:(BOOL)animated withBounds:(CGRect)bounds { // Empty default implementation. }
对于表视图,您不需要更改大小,请参阅TTTableViewController
的keyboardDidAppear
实现
/////////////////////////////////////////////////////////////////////////////////////////////////// - (void)keyboardDidAppear:(BOOL)animated withBounds:(CGRect)bounds { [super keyboardDidAppear:animated withBounds:bounds]; self.tableView.frame = TTRectContract(self.tableView.frame, 0, bounds.size.height); [self.tableView scrollFirstResponderIntoView]; [self layoutOverlayView]; [self layoutBannerView]; }
你应该实现以下方法
- (BOOL) textFieldShouldBeginEditing:(UITextField *)textField{ [self adjustFramesWhenKeyoradIsShown]; }
在实现中,您应该重新调整文本框架。 如果您还有其他视图需要显示,而不是通过键盘隐藏,则还应该移动它们。 有两种方法可以为两个位置重新调整帧(一个是显示键盘时,另一个是隐藏时),所以一旦文本字段完成编辑,就可以在下面的文本字段委托方法中调用另一个方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { [self adjustFramesWhenKeyoradIsHidden]; }
在这两种帮助方法中,您可以更改框架位置并将视图更改为隐藏或隐藏,如果您使用它们进行animation处理,它会更好看,如下所示:
- (void) adjustFramesWhenKeyoradIsShown{ [UIView animateWithDuration:0.3 delay:0.0 options: UIViewAnimationCurveEaseOut animations:^{ logoArea.hidden = YES; loginFieldsArea.frame = CGRectMake(0, 0, 320, 250); } completion:^(BOOL finished){ }]; }
我个人强烈build议使用Michael Tyson的TPKeyboardAvoiding 。
这很容易使用…(引自Read Me):
为了与UITableViewController类一起使用,将TPKeyboardAvoidingTableView.m和TPKeyboardAvoidingTableView.h拖放到您的项目中,并使您的UITableView成为xib中的TPKeyboardAvoidingTableView。 如果你没有使用你的控制器的xib,我知道没有简单的方法来使它的UITableView成为一个自定义类:阻力最小的path是为它创build一个xib。
对于非UITableViewController ,将TPKeyboardAvoidingScrollView.m和TPKeyboardAvoidingScrollView.h源文件放入您的项目中,将UIScrollViewpopup到视图控制器的xib中,将滚动视图的类设置为TPKeyboardAvoidingScrollView,并将所有控件放在该滚动视图中。 您也可以通过编程的方式来创build它,而不使用xib – 只需使用TPKeyboardAvoidingScrollView作为顶层视图即可。
- 在任何文本字段中键入崩溃的应用程序
- Facebook.com和iOS7强制门户检测
- revealViewController()总是返回nil
- 移动网站/应用程序 – 离线捕获数据并推送到实时数据库
- iOS滚动到UITable视图中的一个部分
- 如果一个文本字段已经添加到单元格,怎么不创build一个新的文本字段
- 从UIUserNotificationTypeNone传递到UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound
- 将UIWebView限制到特定的URL(Swift)
- Jenkins + iOS构建