键盘出现时调整静态UITableView?

时间:2014-06-15 14:53:08

标签: iphone objective-c uitableview ios7

我正在开发一个静态UITextField中包含UITextViewUITableView的应用。我面临两个问题

  1. 当我选择UITextField时,它正确移动但不适用于UITextView
  2. 当键盘消失时,UITableView未正确显示。
  3. 我想要的是在键盘出现和消失时相应地调整UITextFieldUITextView。这是我的代码。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    
    
    
    
    - (void)keyboardWillShow:(NSNotification *)notification {
    //get the end position keyboard frame
    NSDictionary *keyInfo = [notification userInfo];
    CGRect keyboardFrame = [[keyInfo objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
    //convert it to the same view coords as the tableView it might be occluding
    keyboardFrame = [self.tableView convertRect:keyboardFrame fromView:nil];
    //calculate if the rects intersect
    CGRect intersect = CGRectIntersection(keyboardFrame, self.tableView.bounds);
    
    
    
    if (!CGRectIsNull(intersect)) {
        //yes they do - adjust the insets on tableview to handle it
        //first get the duration of the keyboard appearance animation
        NSTimeInterval duration = [[keyInfo objectForKey:@"UIKeyboardAnimationDurationUserInfoKey"] doubleValue];
        //change the table insets to match - animated to the same duration of the keyboard appearance
        [UIView animateWithDuration:duration animations:^{
            self.tableView.contentInset = UIEdgeInsetsMake(0, 0, intersect.size.height, 0);
            self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, intersect.size.height, 0);
        }];
    }
    
    
    }
    
    
    - (void) keyboardWillHide:  (NSNotification *) notification{
    NSDictionary *keyInfo = [notification userInfo];
    NSTimeInterval duration = [[keyInfo objectForKey:@"UIKeyboardAnimationDurationUserInfoKey"] doubleValue];
    //clear the table insets - animated to the same duration of the keyboard disappearance
    [UIView animateWithDuration:duration animations:^{
    
        self.tableView.contentInset = UIEdgeInsetsZero;
        self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero;
    }];
    
    
    }
    

2 个答案:

答案 0 :(得分:0)

尝试使用UITableView的实例方法: scrollToRowAtIndexPath:atScrollPosition:animated:

在keyBoardWillShow中使用tableview或textfield的索引路径,并将滚动位置设置为 UITableViewScrollPositionTop

如果它无法正常工作,请尝试使用 scrollToRowAtIndexPath:atScrollPosition:animated:

希望这有帮助,祝你好运! :))

有关详细信息,请查看Apple的UITableView参考:https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html

答案 1 :(得分:0)

您可以使用第三方库来避免文本字段或文本视图上方的键盘滚动。 使用https://github.com/cokecoffe/ios-demo/blob/master/TPKeyboardAvoiding/TPKeyboardAvoidingScrollView.m

您可以使用UITableviewController作为视图控制器类。将Tableview内容属性更改为Static。然后,您可以从故事板将任何UI控件添加到表视图的静态单元格。 如果您在tableview中选择任何文本字段或文本视图,则键盘会自动显示文本字段或文本视图的下方,而无需任何编程逻辑。