UITableView与UITextView滚动问题

时间:2013-03-28 10:58:36

标签: ios xcode ipad uitableview

我已经用一些自定义单元格创建了一个tableview。一些自定义单元格包含UIWebView,有些自定义单元格包含UISliderUITextField,有些自定义单元格包含UIButton

现在,当我点击UITableView底部的uitableviewcell子视图的文本字段时,我无法在键盘上方显示我的表格单元格。

我无法使用UITableViewController代替UIViewController。因为我的UI结构有点怪异和动态。简单来说就像

UIView -> UIScrollView with paging -> x number of UITableViews -> y number of UITableViewCell ->  z number of UITextFields, UISliders, UIWebViews, UIButtons, UILables, etc.

我也试过下面的代码来使它工作。

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview];
    [table_Question[pageNumber] scrollToRowAtIndexPath:[table_Question[pageNumber] indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

但它不起作用:(

谢谢,

编辑1:

我检查了textfield,tableviewcell和tableview的引用。所以对象的引用不是问题。

3 个答案:

答案 0 :(得分:2)

试试这个代码......

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
        UITableViewCell *cell = (UITableViewCell*) [[textField superview] superview];
        NSIndexPath *indexPath = [[table_Question[pageNumber] indexPathForCell:cell];

        int totalRows = 0;
        if([[table_Question[pageNumber] numberOfSections] > 1)
         {
              for(int i = 0; i<([indexPath.section] - 1);i++)
               {
                     totalRows += [[table_Question[pageNumber] numberOfRowsInSection:i];
                }
          }

          totalRows += indexPath.row;

        int  yPosition = totalRows * cell.frame.size.height;
        CGPoint offset = CGPointMake(0, yPosition);
        [[table_Question[pageNumber] setContentOffset:offset animated:YES];
}

这对你有帮助......

答案 1 :(得分:1)

根据我的理解,当用户开始编辑UITextField内的UITextField时,您希望显示UITableViewCell以及键盘。 如果是这种情况,您可以将contentInset的{​​{1}}设置为所需的大小,然后滚动到所需的索引路径。

以下是示例代码:

UITableView

答案 2 :(得分:1)

试试此代码

- (void)textFieldDidBeginEditing:(UITextField *)textField
{

    UITableViewCell *aCell = [table_Question[pageNumber] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
    CGSize cellSize = aCell.frame.size;
    [table_Question[pageNumber] setContentOffset:CGPointMake(0, cellSize.height*2) animated:YES];
}