gpt4 book ai didi

iphone - 从带有自定义单元格的 UITableView 内的 UITextView 打开键盘时避免查看

转载 作者:行者123 更新时间:2023-11-29 13:43:58 24 4
gpt4 key购买 nike

我有一个 UIViewController,其中包含一个带有自定义单元格的 UITableView,单元格内部是 UILabels,几个不可编辑的 UITextView 和一个可编辑的 UITextView。现在,当我点击靠近底部或表格底部的 UITextView 之一时,UITextView 被键盘覆盖。我试过了 http://cocoawithlove.com/2008/10/sliding-uitextfields-around-to-avoid.html这对文本字段/ TextView 非常有用,但不适用于带有自定义单元格的表格。任何帮助或建议如何解决这个问题?

最佳答案

当您的 TableView 包含数据输入字段,如 UITextFieldUITextView 并且 TableView 足够长以覆盖屏幕时,您将无法访问数据被键盘隐藏的输入字段。
为了克服这个问题,有两个解决方案:

  1. 最简单和推荐的方法是使用 UITableViewController 而不是 UIViewController,它会自动确保键盘不会隐藏可编辑字段(如果可能的话使用这种方式来避免UI调整带来的不便)

  2. 如果您使用 UIViewControllerUITableView 作为其 subview 。您可以通过观察 UIKeyboardWillShowNotificationUIKeyboardWillHideNotification

    滚动 UI 的框架
    - (void)registerForKeyboardNotifications 
    {
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(keyboardWillShow:)
    name:UIKeyboardWillShowNotification object:nil]; //Posted immediately prior to the display of the keyboard

    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(keyboardWillHide:)
    name:UIKeyboardWillHideNotification object:nil]; //Posted immediately prior to the dismissal of the keyboard.
    }


    - (void)keyboardWillShow:(NSNotification *)aNotification
    {
    CGRect keyboardBounds = [[[aNotification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];

    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0); //when keyboard is up, that time just bring your text filed above the keyboard
    self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);

    [self.tableView scrollToRowAtIndexPath:[self findIndexPathToScroll]
    atScrollPosition:UITableViewScrollPositionTop
    animated:YES]; //findIndexPathToScroll implementation not shown
    [UIView commitAnimations];
    }

    - (void)keyboardWillHide:(NSNotification *)aNotification
    {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.tableView.contentInset = UIEdgeInsetsZero; //Once keyboard is hidden then bring back your table into your original position.
    self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero;
    [UIView commitAnimations];
    }
    • registerForKeyboardNotifications - 在加载 UITableView 时调用此方法,即:viewDidLoad

    • findIndexPathToScroll -(未显示实现)您的业务逻辑是准备应该滚动 TableView 的 IndexPath

    • removeObserver deallocviewDidUnload 中的“UIKeyboardWillShowNotification”和“UIKeyboardWillHideNotification”

关于iphone - 从带有自定义单元格的 UITableView 内的 UITextView 打开键盘时避免查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8209499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com