iOS设置使用表视图扩展TableCell的高度

时间:2014-07-23 08:00:19

标签: ios objective-c uitableview expand

我使用可扩展单元格创建了一个TableView为shown here。在我的例子中,扩展区域包含TextView。我的视图包含一个标签(作为标签文本)及其含义(在文本视图中)。事情很好。

我想出了一个标签可以有多种含义的情况。所以我需要展示所有的意义。因此,每个标签都有很多textview的含义。

我在表格单元格的可扩展部分中添加了一个TableView(在TableCell中使用TextView)。因此,可以在展开的表格单元格中添加X行数,并在单个单元格中添加标记的每个含义。我想设置TextView,TableView和最后的TableViewCell的高度。我尝试了不同的方法,但我无法实现它。你能帮我实现我想要的方式吗?

我想要实现的东西的屏幕截图 - enter image description here

更新: -

我正在尝试设置属性的cellForRowAtIndexPath方法: -

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"Table View TAG = %d  ROW = %d", tableView.tag, indexPath.row);

    // TABLE VIEW IN THE CELL
    if (tableView.tag == 10) {  //  cell.valuesTv
        CannedValueCell *ccell = (CannedValueCell *) [tableView dequeueReusableCellWithIdentifier:@"cannedValueCell"];

        if (ccell == nil) {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CannedValueCell" owner:self options:nil];
            ccell = [nib objectAtIndex:0];
        }

        // Populate valuesTv
        ccell.valueTextView.text = [valuesArray objectAtIndex:indexPath.row];

        UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(valueTextViewTapped)];
        [ccell.valueTextView addGestureRecognizer:gestureRecognizer];

        //[ccell.valueTextView sizeToFit];  // Makes no difference 
        // CGRect frame = ccell.valueTextView.frame;
        // frame.size.height = ccell.valueTextView.contentSize.height;
        // ccell.valueTextView.frame = frame;

        NSLog(@"*** TEXTView HEIGHT = %f  C_CELL HEIGHT = %f   ** TV HEIGHT = %f", ccell.valueTextView.frame.size.height, ccell.frame.size.height, cell.valuesTv.frame.size.height );  
        // *** TEXTView HEIGHT = 79.000000  C_CELL HEIGHT = 80.000000   ** TV HEIGHT = 80.000000  
        //  AS SET HEIGHT IN STORY BOARD - NO DIFFERENCE
        return ccell;

    } else {

        //  MAIN TABLE VIEW
        static NSString *cellIdentifier = @"CannedCell";

        cell = (CannedCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
        if(cell == nil) {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CannedCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }

        // Set datasource and delegate for the cell's TableView
        cell.valuesTv.dataSource = self;
        cell.valuesTv.delegate = self;

        .......
    }
}

表视图委托方法

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.cannedTV) {
        if (selectedIndex == indexPath.row)
            return 150;     //(30 + (80 * valuesArray.count));
        else
            return 30;
        }
        return 30;
    }
}

结果如下: -

enter image description here

我尝试了各种各样的东西,在网上搜索了很多,但找不到以下解决方案: -

  1. 将文本视图的高度设置为与其内容一样多。
  2. 内表应该是完全可见的 - 在所有单元格中,应该可以看到全文本视图,其中包含完整内容。所以每个细胞可能有不同的高度。
  3. 因此,外部/主表可扩展单元也应相应地设置。 - 为此我尝试了(30 +(80 * valuesArray.count));,但内部表没有占用那么多空间。
  4. 如何获取哪个文本视图?触发textview时,会触发方法valueTextViewTapped,但仍无法找到触发的textview。如何将indexPath.row传递给valueTextViewTapped方法,以便找到哪个文本视图被点击?
  5. 请您指导我相应地设定组件的高度并达到要求。任何帮助都非常感谢。感谢。

1 个答案:

答案 0 :(得分:1)

表视图和表视图控制器是非常强大的工具。

根据提供的信息,您建议的实施情况令人满意。

UITableViewCell可以使用表格视图委托方法heightForRowAtIndexPath动态设置其高度。

您可以使用表格视图委托方法UITableViewCell回复选择didSelectRowAtIndexPath的用户。