带有 UITextView 的 iOS 7 UITableViewCell 隐藏在键盘后面

Posted

技术标签:

【中文标题】带有 UITextView 的 iOS 7 UITableViewCell 隐藏在键盘后面【英文标题】:iOS 7 UITableViewCell with UITextView is hiding behind keyboard 【发布时间】:2013-09-20 19:39:28 【问题描述】:

所以我在 ios 7 中遇到了一个小问题,在 iOS 6 中运行得非常好(我知道这个得到了很多,但这个很奇怪)。所以无论如何,我有一个 Storyboard 应用程序,TableView 有一些原型单元格,一个部分有几个标签,然后是一个用于输入响应的 TextView。现在在 iOS6 中,当用户单击 TextView 时,表格会滚动以腾出空间,以便在键盘上方看到 TextView,但现在在 iOS 6 中(并且仅在 4s iphone 上,因为它的屏幕较小)键盘会滑动向上并且 TableView 仅滑动到足以使整个 TableViewCell 仍然可见,这使得 TextView 位于键盘后面的一半。这变得很麻烦,因为在输入单行文本后,由于 TextView 被键盘阻止,用户不知道还输入了什么。这在该部分的第一个单元格上更糟,因为 TableView 滚动仅足以使单元格和标题可见。我不知道看到代码是否会有所帮助,但我会在下面发布(默认情况下,单元格的高度仅足以显示标签,然后当用户单击单元格时,该单元格上的高度会扩展为显示标签下方的 TextView 和 Buttons)

if ([indexPath section] == 1) 
        if ([btrArray count] > 0) 
            BTRCustomCell *btrCell = [tableView dequeueReusableCellWithIdentifier:@"BTRCell"];



            //Check if BTR Row has been selected to expand View
            if (row == btrSelectedRow) 
                CGRect extended = btrCell.reasonLbl.frame;
                extended.size.height = 70;
                btrCell.reasonLbl.frame = extended;
                btrCell.responseTV.hidden = NO;
                btrCell.ackButton.hidden = NO;
                btrCell.replyButton.hidden = NO;
            
            else 
                CGRect normal = btrCell.reasonLbl.frame;
                normal.size.height = 30;
                btrCell.reasonLbl.frame = normal;
                btrCell.responseTV.hidden = YES;
                btrCell.ackButton.hidden = YES;
                btrCell.replyButton.hidden = YES;
            

//leaving out the lines that just add text to labels
btrCell.responseTV.textColor = [UIColor lightGrayColor];
            [[btrCell.responseTV layer] setBorderColor:[[UIColor lightGrayColor] CGColor]];
            [[btrCell.responseTV layer] setBorderWidth:2.3];
            [[btrCell.responseTV layer] setCornerRadius:15];
            btrCell.responseTV.tag = kBTRTextView + row;
            btrCell.responseTV.delegate = self;

            //Add Keybar to TextView
            UIToolbar *keyBar = [[UIToolbar alloc] init];
            [keyBar setTintColor:MobileThemeColor];
            [keyBar sizeToFit];

            UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
            UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard:)];
            doneButton.tag = kBTRDoneButton + row;
            NSArray *itemArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];
            [keyBar setItems:itemArray];

            [btrCell.responseTV setInputAccessoryView:keyBar];

            //Add Targets To Buttons
            [btrCell.ackButton addTarget:self action:@selector(AcknowledgeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
            btrCell.ackButton.tag = kBTRAckButton + row;
            [btrCell.replyButton addTarget:self action:@selector(ReplyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
            btrCell.replyButton.tag = kBTRReplyButton + row;

            return btrCell;

我不太确定如何解决此问题或导致此问题的原因。我几乎要重新编写应用程序,因为原来的应用程序是为 iOS3 构建的,然后只进行了小幅更新以支持 iOS6,因此没有使用 ARC,也没有使用更好的 Storyboards 和 Auto-Layouts使用应用程序的方式,所以这段代码是从以前的版本复制到这个版本的,但就像我说的那样,在 iOS7 之前它工作得很好。我不知道这是否只是 iOS7 中新行为的一部分,即没有一直滚动 TableView 以查看 TextView 或者我在设置中做错了什么,所以任何帮助都会很棒。

【问题讨论】:

【参考方案1】:

1) 在 .h 文件中,@interface MyViewController () <UITextViewDelegate>

2) yourTextView.delegate = self;

3) 使用这个委托方法向上滚动tableview

-(void) textViewDidBeginEditing:(UITextView *)textView


    if ([textView isEqual:yourTextView]) 
    

        [tableview_WardList scrollToRowAtIndexPath:indexPathOfCellContainigTextview atScrollPosition:UITableViewScrollPositionTop animated:YES];

    


当开始编辑 textview 时,表格将向上滚动。请务必传递包含 textview 的单元格的 indexpath。

【讨论】:

以上是关于带有 UITextView 的 iOS 7 UITableViewCell 隐藏在键盘后面的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 + Calabash:带有 NSLinkAttributeName 的 UITextView 和链接上的可访问性不起作用

iOS 7 中具有 UITextView 高度的 UITableViewCell?

ios - 带有 UITextView 的 UITapGestureRecognizer

UITextView iOS 7的行数

iOS - 带有 UITextView 的表格视图单元格未正确调整大小

iOS UITextView 或 UILabel 带有可点击的动作链接[重复]