4

我对 iOS 中的一个功能感到好奇。如果可以的话,请在这里帮助我。

场景:我正在使用输入名称的文本框。它在屏幕的下半部分。文本框正下方是一个显示剩余字符数的标签(例如,在 twitter 提要中)。

问题:当我将文本框放在屏幕的上半部分时。文本字段和标签都是可见的。但是当我将它们放在下半部分时,苹果键盘会覆盖标签部分。有没有办法控制覆盖的区域,使下面的标签也可见?我希望我已经把自己说得够清楚了。谢谢。

4

4 回答 4

5

在这里,我使用了委托方法,UITextView你可以这样做UITextField

- 在此代码中,当用户开始在其中输入值时textview,您的视图的高度会低于其原始动画

-当用户结束输入值时,它将使您的视图大小为原始大小。

-(void)textViewDidBeginEditing:(UITextView *)textView
{

    CGRect frame = self.view.frame;
    frame.origin.y = -100;
    [self.view setFrame:frame];
    [UIView commitAnimations];
}
-(void)textViewDidEndEditing:(UITextView *)textView
{
    CGRect frame = self.view.frame;
    frame.origin.y = 0;
    [self.view setFrame:frame];
    [UIView commitAnimations];

 }

如果您想了解代表,此链接可以帮助您

于 2013-07-22T12:56:26.273 回答
2

那么在这种情况下,您必须在键盘弹出时移动文本框。您可以注册通知以了解键盘何时弹出,并且滚动视图将整个内容向上滚动屏幕可以为您完成这项工作

看到这个问题,它很好地解释了如何管理这样的事情

于 2013-07-22T12:26:52.007 回答
2

AFAIK您无法控制iOS本机键盘的大小,您可以而且应该做的就是使它们成为滚动视图的子视图并向上滚动。

所以通常的做法是这样的。

  • 订阅键盘通知。UIKeyboardWillShowNotification
  • 在 Notification listener 将调用的方法中,相应地设置 scrollView 的内容大小并设置内容偏移量。

    self.scrollView.contentSize = CGSizeMake(320, 267);
    self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, localKeyboardFrame.size.height, 0); 
    [self.scrollView scrollRectToVisible:<rect of view you want to scroll to> animated:YES];
    
  • 借助适当的通知,在键盘隐藏时撤消更改。UIKeyboardWillHideNotification

    self.scrollView.contentInset = UIEdgeInsetsZero
    

这是iOS Human Interface Guide 的解释

于 2013-07-22T12:28:56.147 回答
1

viewDidLoad在您的方法中添加以下内容

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKeyboard) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard) name:UIKeyboardWillHideNotification object:nil];

之后——在你的 .m 文件中声明以下 2 个方法

-(void)showKeyboard {
    [UIView beginAnimations:@"slide" context:nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformMakeTranslation(0, -100);
    [UIView commitAnimations]; }

-(void)hideKeyboard {
    [UIView beginAnimations:@"slide" context:nil];
    [UIView setAnimationDuration:0.1];
    self.view.transform = CGAffineTransformMakeTranslation(0, 0);
    [UIView commitAnimations]; }
于 2013-11-23T11:40:18.560 回答