0

UITextField当用户点击相应的对象时,我已经竭尽全力让整个视图移动到适当的位置,看起来无缝。我知道我不是唯一一个绝对讨厌这样做的人。

以尽可能少的工作量使这项工作尽可能精美的最佳方法是什么?

我已经尝试过TPKeyboardAvoiding,它完全糟透了。

现在,我已经完成了这段代码,但它也以它自己的特殊方式很糟糕:

- (void)viewDidLoad
{
    self.view.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin);
    self.scrollView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin);

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];
}


- (void)keyboardWasShown:(NSNotification *)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;

    // If active text field is hidden by keyboard, scroll it so it's visible
    // Your application might not need or want this behavior.
    CGRect aRect = self.view.frame;
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, self.activeField.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, self.activeField.frame.origin.y-kbSize.height);
        [self.scrollView setContentOffset:scrollPoint animated:YES];
    }
}

- (void)keyboardWillBeHidden:(NSNotification *)aNotification
{
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;
}
4

2 回答 2

1

对我来说,它适用于 TPKeyboardAvoiding,我在所有项目中都使用它。您是否尝试过:

  1. 将 UIScrollView 添加到视图控制器的 xib
  2. 将滚动视图的类设置为 TPKeyboardAvoidingScrollView(仍在 xib 中,通过身份检查器)
  3. 将所有控件放在该滚动视图中?

我也找到了这个解决方案:键盘管理器

  1. 下载演示项目
  2. 只需将 KeyboardManager 和 SegmenedNextPrevious 类拖放到您的项目中
  3. 在你的 appDelegate 中只写一行代码:

    [键盘管理器安装键盘管理器];

祝你好运!

于 2014-02-12T20:54:52.887 回答
0

您是否知道如果您的视图控制器派生自 UITableViewController,当文本字段或文本视图获得焦点时,当键盘显示时滚动表格视图是自动的?你不必做任何事情。话虽这么说,但对于您的应用程序来说,重构 UI 以便它使用带有静态单元格的表格视图而不是您现在正在做的任何事情可能效果不佳。

如果这对您不起作用,您可以contenSize在显示键盘时将滚动视图更改为可见区域的大小,然后在滚动视图上调用scrollRectToVisible:animated:将它传递给您的键盘内的文本字段的矩形WasShown: 选择器.

于 2013-02-20T04:08:19.890 回答