在 iOS 中单击按钮时的标签和框架扩展
Posted
技术标签:
【中文标题】在 iOS 中单击按钮时的标签和框架扩展【英文标题】:Label and frame expansion on button click in iOS 【发布时间】:2013-08-24 04:38:10 【问题描述】:我需要通过单击表格视图部分中的按钮来展开框架和标签。同样,当再次单击按钮时,框架和标签应恢复到其原始(压缩)状态。这必须对表格视图的所有部分进行。如果我单击一个部分的按钮,它会扩展所有部分的框架。但是该标签已针对该单击部分上的所有内容展开。下面是代码:
- (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 和 2 部分执行此操作。请指教。
【问题讨论】:
【参考方案1】:我认为您确实没有 3 个部分,而是一个包含 3 个表格视图单元格的部分。
似乎对节和行存在一些误解。你写:
我需要通过单击表格视图部分中的按钮来展开框架和标签。
这没有意义。表格视图部分中没有 UI 元素。相反,一个部分包含行(单元格),这些行(单元格)又包含标签等,并且它可能显示一个部分标题。所以你真的想扩展属于一个部分的行。
如果是第二部分,您的heightForRowAtIndexPath
不能返回除60.0
之外的任何其他内容。但请注意,此方法不返回“截面高度”,而是返回一行的高度。如果你看到的三个空格都展开了,那么它们一定都在第 0 节中。
假设每个部分只需要一行,您需要:
在numberOfSections
中返回 3
在numberOfRowsInSection
中返回 1
最后,检查按钮的文本以确定是哪一个不是好的做法。您可以使用整数tag
按钮,然后在处理程序中检查[(UIButton*)sender tag]
。我看到你在某处使用了一个标签,但不清楚为什么你还需要一个字符串常量。
【讨论】:
我希望在按下第 0 节的阅读更多按钮时更改第 0 节的高度,第 2 节的高度也是如此……这就是我想要的……你能帮我解决这个问题吗?跨度>以上是关于在 iOS 中单击按钮时的标签和框架扩展的主要内容,如果未能解决你的问题,请参考以下文章