在iOS中按钮上的标签和框架扩展

时间:2013-08-24 04:38:10

标签: ios uitableview uiview ios4

我需要在表视图的某个部分中单击按钮时展开框架和标签。同样,再次单击该按钮时,框架和标签应恢复到其原始(压缩)状态。必须对表视图的所有部分执行此操作。如果我点击一个部分的按钮,它会扩展所有部分的框架。但是该标签在所点击的部分上进行了扩展。以下是代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{                   
    NSUInteger section = [indexPath section];

    if(section==0 || section==2)
    {                   
        static NSString *myIdentifier = @"tableCell";

        DUGSProjectTableCell *cell = (DUGSProjectTableCell*)[tableView dequeueReusableCellWithIdentifier:myIdentifier];
        cell.readMoreButton.tag=[indexPath section];

        [cell.readMoreButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

        if (section==0) {

            cell.myLabel.text=@"On this festive season one of the leading real estate developers in NCR Delhi, is launching a new residential project ";
        }

        else if (section==2){
            cell.myLabel.text=@"Situated in hot & fast upcoming neighbourhood,Spread in 30 acres,Located in the heart of the city";
        }

        if(self.isHeightChanged)
        {                       
            if ([cell.readMoreButton.titleLabel.text isEqualToString:@"Read More"]) {

                [cell.readMoreButton setTitle:@"Read Less" forState:UIControlStateNormal];

                cell.readMoreButton.frame=CGRectMake(223, 90 , 66, 25) ;

                CGRect frame = cell.myLabel.frame;

                cell.myLabel.numberOfLines=0;
                cell.myLabel.lineBreakMode=NSLineBreakByWordWrapping;
                frame.size.height=100;
                cell.myLabel.frame=frame;

            }

            else if ([cell.readMoreButton.titleLabel.text isEqualToString:@"Read Less"])
            {
                [cell.readMoreButton setTitle:@"Read More" forState:UIControlStateNormal];

                cell.readMoreButton.frame=CGRectMake(223, 70 , 66, 25) ;

                CGRect frame = cell.myLabel.frame;

                cell.myLabel.numberOfLines=0;
                cell.myLabel.lineBreakMode=NSLineBreakByWordWrapping;

                frame.size.height=30;
                cell.myLabel.frame=frame;

            }
        }
        return  cell;
    }

    else if (section==1){

        static NSString *myIdentifier = @"unitCell";

        DUGSUnitPlanCell *cell = (DUGSUnitPlanCell*)[tableView dequeueReusableCellWithIdentifier:myIdentifier];

        return cell;

    }

    return NULL;
}

以下是按钮点击的代码:

 (void)buttonPressed:(UIButton *)button
{
    DUGSProjectTableCell *selectedCell = (DUGSProjectTableCell*)[[button superview] superview];
    if (selectedCell) {



        if ([button.titleLabel.text isEqualToString:@"Read More"] ) {
            whichButton=@"M";
            NSLog(@"%@",whichButton);
        }

        else if ([button.titleLabel.text isEqualToString:@"Read Less"]){
           whichButton=@"L";
            NSLog(@"%@",whichButton);

        }
        NSLog(@"%d",selectedCell.readMoreButton.tag);

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:selectedCell.readMoreButton.tag];
        selectedIndexPath=indexPath;
        NSLog(@"%@",selectedIndexPath);
        self.isHeightChanged=YES;
        [self.tableViewForPropertyOverview reloadRowsAtIndexPaths:@[selectedIndexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];

    }

}

以下是扩展框架的代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if([indexPath section]==1){
        return 60;
    }

    if (([indexPath section]==0)||([indexPath section]==2)) {

        if (selectedIndexPath!=NULL){
            return 120.0f;

        }

        else{
            return 60.0f;

    }}

}

所有部分的帧大小都增加到120。相反,它应该适用于第0和第0部分。 2单击其中的按钮时。请指教。

1 个答案:

答案 0 :(得分:0)

我认为你真的没有3个部分,而是有3个表视图单元的一个部分。

似乎对部分和行存在一些误解。你写道:

  

我需要在表格视图的某个部分点击按钮时展开框架和标签。

这没有意义。表视图部分中没有UI元素。相反,一个部分包含行(单元格),而行(单元格)又包含标签等,它可能会显示一个节标题。所以你真的想要扩展属于一个部分的行。

如果heightForRowAtIndexPath是第二部分,则60.0除了numberOfSections之外不能返回任何其他内容。但请注意,此方法不会返回“节高度”,而是返回行的高度。如果您看到的所有三个空格都已展开,则它们必须全部位于第0部分。

假设每个部分只需要一行,您需要:

  • numberOfRowsInSection
  • 中返回3
  • tag
  • 中返回1

最后,检查按钮的文本以确定哪个是不好的做法。您可以[(UIButton*)sender tag]带有整数的按钮,然后在处理程序中检查{{1}}。我看到你在某处使用了一个标签,但不清楚为什么你也需要一个字符串常量。